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. PHP-解码unicode编码的中文字符

    在Python中使用 "\uxxxx".decode("unicode_escape") 1. class Helper_Tool { public stati ...

  2. Python-深入理解元类(metaclass)

    1.使用 type 动态创建类(type 是一个类, 用来创建类对象的元类, 所以也可以继承) type("Person", (), {"name": &quo ...

  3. unity3d之NGUI学习流水账

    博主是跟着视频教程学的,所以最新版的u3d是否已经自带这个功能博主没有考究过. 但是视频是2015下半年的教程,当时的u3d还是需要自行导入NGUI包的. 1.首先需要下载NGUI包.点此进入ngui ...

  4. 使用Apache Jmeter进行并发压力测试

    http://blog.jassassin.com/2014/04/17/tools/jmeter/

  5. 多线程-Thread与Runnable源码分析

    Runnable: @FunctionalInterface public interface Runnable { /** * When an object implementing interfa ...

  6. HTTP Basic auth认证

    Basic 概述 Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用. 当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP ...

  7. 获取真实的IE版本(转)

    IE 的浏览器模式和文本模式(二) 发表于 2013-09-07 Author: Jerry Qu 文章目录 判断真正的 IE 版本 JScript 引擎版本号 文本模式对 JScript 没影响? ...

  8. JVM Specification 9th Edition (4) Chapter 3. Compiling for the Java Virtual Machine

    Chapter 3. Compiling for the Java Virtual Machine 内容列表 3.1. Format of Examples 3.2. Use of Constants ...

  9. FastDFS安装详解

    1.安装环境 os:centos6.5 Fastdfs版本:FastDFS_v5.08.tar.gz 下载地址:https://sourceforge.net/projects/fastdfs/fil ...

  10. Character流与Byte流的区别

    Character流与Byte流的区别 (2012-09-25 16:15:49) 标签: 杂谈 分类: 大赛指导 Character流与Byte流的区别是 A) 每次读入的字节数不同 B) 前者带有 ...