java 包冲突解决方法
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 包冲突解决方法的更多相关文章
- tomcat web工程 jar包冲突解决方法
目前在部署工程时,遇到了一个问题,报错信息如下: See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet ...
- Android Studio androidx 包冲突解决方法
如果包冲突了会包如下这样的错: Android dependency 'androidx.core:core' has different version for the compile (1.0.0 ...
- jar包冲突解决方法
import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Enumerati ...
- Failed to read candidate component class包冲突解决方法
该类问题出现错误有两个可能,第一JAR包错误,第二就是我们的System library版本不正确导致的问题.
- 安装mysql时包冲突解决方法
报错信息如下: 解决办法: 在卸载代码上加上不检查关联信息即可(rpm -ev mysql-libs-5.1.73-7.el6.x86_64 --nodeps) 检查服务器是否还有mysql安装包:r ...
- 图片加载框架Fresco与V4包冲突解决方法
- mvnjar包冲突解决方法
命令 mvn dependency:tree -Dverbose 结果: [INFO] +- com.esotericsoftware:kryo:jar:4.0.2:test [INFO] | +- ...
- Android - "已安装了存在签名冲突的同名数据包",解决方法!
错误提示:已安装了存在签名冲突的同名数据包. 解决方法:打开Android Studio,打开logcat,用usb线连接你出错的手机,识别出手机之后,在你的项目后面,点击“run”按钮,随后AS会提 ...
- 【Maven】【IDEA】在idea中开发web项目,解决maven的jar包冲突的方法
在idea中开发web项目,解决maven的jar包冲突的方法 第一步: 先对项目进行 clean ,再进行install 第二步: 出现NoSuchMethodException,ClassNotF ...
随机推荐
- Openerp开发进销存系统总结
转自 :http://blog.sina.com.cn/s/blog_7cb52fa80101ngt8.html 差不多用了2个星期的闲余事件,对于openerp v7.0进行了学习和应用开发.细节总 ...
- 03-hibernate注解-关系映射级别注解-一对一
实体之间的映射关系 一对一:一个公民对应一个身份证号码 一对多(多对一):一个人可以有多个银行账号 多对多:一个学生有多个老师,一个老师有多个学生. 一对一单向外键关联 @OneToOne(casca ...
- win7 linux双系统删除linux
本文内容收集自互联网,共两篇,中间以“分界线”进行分割. linux的卸载 一.win7与linux都使用grub来引导 卸载:不能直接删除ubuntu分区,这样会造成win7也启动不了 正确方法: ...
- hibernate list和iterate
list方法会一次查出所有内容,放在list里和缓存中.再次查询同一内容仍然会去数据库重新查一遍,并刷新缓存. iterate方法会一次查出所有内容的ID,等用到某个ID对应的内容时又会去根据主键查询 ...
- 可拖拽的3D盒子
代码地址如下:http://www.demodashi.com/demo/11453.html 一直想做一个立体的盒子,前段时间刚好看见掘金上有位朋友发了篇关于3d盒子的文章,看了决定自己做一下, ...
- 批量删除git分支
本篇文章由:http://xinpure.com/bulk-delete-git-branching/ 批量删除git分支 使用 git 时候,经常会发现,不知不觉就创建了大量的分支.那么,麻烦事就来 ...
- 《将一个字符串转换成datetime时,先分析该字符串以获取日期,然后再将每个变量放置到datetime对象中》的解决办法
我们在写代码时,稍不注意就收到VS那文不对题的错误提示. 最近在项目上碰到了“将一个字符串转换成datetime时,先分析该字符串以获取日期,然后再将每个变量放置到datetime对象中”的这个错误提 ...
- xpath的基础实例
本文分为路径表达式和常用函数两部分,整理自火车浏览器官方教程-火车浏览器之Xpath讲解. 小提示:可以使用火狐浏览器.我用的是火狐浏览器+firebug+firepath来进行调试,调试界面是这样的 ...
- javascript 反调试 监听用户打开了Chrome devtool
let div = document.createElement('div'); let loop = setInterval(() => { console.log(div); ...
- git问题:git提交的时候总是提示key加载失败,总是需要手工将key加到Pageant中
问题描述: 重装过一次系统,在重装之前git+tortoisegit配合很好,提交的时候都能自动加载ppk,但是重装系统后,也重新生成pulic key上传到了服务器,但是每次提交的时候都提示key加 ...