1、诊断包冲突

java.lang.NoSuchMethodError: org.apache.commons.io.output.DeferredFileOutputStream.<init>(ILjava/lang/String;Ljava/lang/String;Ljava/io/File;)V

2、解决

2.1 可见的依赖冲突

在eclipse中打开project,在pom文件的dependency hierarchy中,搜冲突的包commons-io,查看各依赖包的依赖信息。包有依赖冲突的话,会有显示xxx版本号与xxx版本号冲突。选择正确的版本号,将剩下的版本号在相应的引用包下exclusion掉。

或者用 mvn dependency:tree > tree.log,将依赖信息导入文件tree.log中,查看包commons-io的依赖信息。

假设运行失败,报错:outofMemery

运行命令:

set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=128m
linux系统运行:
export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=128m"
然后再mvn dependency:tree > tree.log就可以。

2.2 不可见的依赖冲突

1)查看server使用的jboss路径下有没有包括冲突的包的其它版本号。

路径是:jboss-x.x.x.GA/lib, 和 jboss-x.x.x.GA/server/default/lib ,假设里面有冲突的版本号。则删除。

2)查看异常发生时,JVM载入的是哪个包。

在程序启动的脚本中增加JVM启动參数 -verbose:class,然后重新启动应用。在启动日志中能够看到载入的类来自哪个包。

[Loaded org.apache.velocity.runtime.parser.node.ASTTrue from file:/home/admin/app/.default/deploy/app.war/WEB-INF/lib/velocity-1.6.4.jar]

假设在jboos的启动日志中没有发现载入冲突的类。可能是懒载入。

运行触发异常的操作,再看jboss的启动日志。这时就有载入类的信息了。

查看载入的类所在的包,与正确的包比較。

补充:

出现这样的情况。有可能是包的版本号引发的错误。所调用的方法在高版本号和低版本号的实现不一样。或者在某一版本号中,方法有缺失。

也有可能是,两个不同的jar包。里面含有同样路径的类。然后在调用过程中混淆了。这种情况,能够在eclipse中使用shift+ctrl+T,查看project中有多少个这种类。查看类路径信息。

3)找到引发异常的包(比方A)之后。再回到project里面。运行mvn dependency:tree > tree.log

在tree.log里面查找A包的依赖信息。然后在顶层包的依赖中排除掉A包就可以。



demo,假设在依赖树中也没找到依赖信息。

非常可能是其它路径引入进来的(我不知道了。

),要解决的话,就要把A包全局排除掉,不要让它打进包中。

a.网上搜了一下,有一个maven插件,依照配置了一下,未果。

b.找到一个简单的方法。直接在父projectpom文件里增加此包的依赖。然后设置scope属性。

即:

<dependency>

  <groupId>A.groupID</groupId>

  <artifactId>A.artifactId</artifactId>

<version>1.2.7</version>

<scope>provided</scope>

</dependency>

c.在maven库中查找A包的其它版本号,看看有没有空包版本号,名字如not-exist等。

然后再如projectpom中依赖此包。

maven加入依赖的时候,会优先载入高版本号的jar包。假设依赖的这个包是空的。自然不会调里面的类或方法

关于scope,能够參考这个:http://supercharles888.blog.51cto.com/609344/981316

http://drizzlewalk.blog.51cto.com/2203401/665590

compile 默认范围,一直实用。

provided 编译时用,不会被打入jar包

runtime 编译的时候不须要。执行和測试的时候须要。

test 仅仅在測试编译和測试执行时须要

system 须要制定一个本地路径,基于本地对象编译,不推荐使用。

唉。菜鸟之路……

java 包冲突解决方法的更多相关文章

  1. tomcat web工程 jar包冲突解决方法

    目前在部署工程时,遇到了一个问题,报错信息如下: See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet ...

  2. Android Studio androidx 包冲突解决方法

    如果包冲突了会包如下这样的错: Android dependency 'androidx.core:core' has different version for the compile (1.0.0 ...

  3. jar包冲突解决方法

    import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Enumerati ...

  4. Failed to read candidate component class包冲突解决方法

    该类问题出现错误有两个可能,第一JAR包错误,第二就是我们的System library版本不正确导致的问题.

  5. 安装mysql时包冲突解决方法

    报错信息如下: 解决办法: 在卸载代码上加上不检查关联信息即可(rpm -ev mysql-libs-5.1.73-7.el6.x86_64 --nodeps) 检查服务器是否还有mysql安装包:r ...

  6. 图片加载框架Fresco与V4包冲突解决方法

  7. mvnjar包冲突解决方法

    命令 mvn dependency:tree -Dverbose 结果: [INFO] +- com.esotericsoftware:kryo:jar:4.0.2:test [INFO] | +- ...

  8. Android - "已安装了存在签名冲突的同名数据包",解决方法!

    错误提示:已安装了存在签名冲突的同名数据包. 解决方法:打开Android Studio,打开logcat,用usb线连接你出错的手机,识别出手机之后,在你的项目后面,点击“run”按钮,随后AS会提 ...

  9. 【Maven】【IDEA】在idea中开发web项目,解决maven的jar包冲突的方法

    在idea中开发web项目,解决maven的jar包冲突的方法 第一步: 先对项目进行 clean ,再进行install 第二步: 出现NoSuchMethodException,ClassNotF ...

随机推荐

  1. Java之基础(1) - 编程中“为了性能”尽量要做到的一些地方

    最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Ja ...

  2. UML for mac

    今年苹果公司推出的iPhone4和iPad继续大获成功,国内想在苹果的平台下开发软件赚钱的开发人员越来越多.那么,在苹果的平台下开发软件有哪些UML建模工具可用呢?虽然不如Windows平台下那么多的 ...

  3. 01-spring-专题IOC

    接口: 1,用于沟通的中介物的抽象化 2,实体把自己提供给外界的一种抽象化说明,用以内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式(内部可能修改了,但是接口不变). 简 ...

  4. struts 在Action中访问web元素(request,session等)

    出发jsp: <?xml version="1.0" encoding="GB18030" ?> <%@ page language=&quo ...

  5. 我眼中的PageRank算法详解

    随着互联网的发展,网络上已有的网页数量庞大,并且每天都会有很多网页发布,如何权衡这些重要度的排名是一个很重要的问题.我们今天就来了解一下PageRank算法. 首先我们要来了解一下图的概念,请看图1. ...

  6. 分享几款流行的Java框架

    虽然Java一直被唱衰,但是直到现在Java软件开发也坚持霸主地位不动摇,毫无疑问,Java是目前最热门的编程语言之一,下面分享几个个人认为还不错的Java框架,以及各自的优缺点,希望能对大家有帮助. ...

  7. mysql主从复制原理及实现

    一.主从复制原理 利用MySQL提供的Replication,其实就是Slave从Master获取Binary log文件,然后再本地镜像的执行日志中记录的操作.由于主从复制的过程是异步的,因此Sla ...

  8. swift向方法传数组参数的语法

    总是记不住向方法中传数组参数的语法,所以记录一下. func calculateStatistics(scores:[Int]) -> (min:Int,max:Int,sum:Int) { v ...

  9. 阻塞IO、非阻塞IO的区别

    1.类与类之间的关系:依赖,实现,泛化(继承),关联,组合,聚合. 1)依赖(虚线):一个类是 另一个类的函数参数 或者 函数返回值. 2)实现(实线加小圆):对纯虚函数类(抽象类)的实现. 3)继承 ...

  10. JUC之AQS

    AbstractQueuedSynchronizer(AQS) AQS是并发容器里的同步器,从jdk1.5开始引入了并发包,java.util.concurrent,提供了一个基于first in f ...