码迷,mamicode.com
首页 > 编程语言 > 详细

java 包冲突解决方法

时间:2014-10-22 01:07:47      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:io   os   ar   使用   java   sp   文件   on   log   

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中打开工程,在pom文件的dependency hierarchy中,搜冲突的包commons-io,查看各依赖包的依赖信息。包有依赖冲突的话,会有显示xxx版本与xxx版本冲突。选择正确的版本,将剩下的版本在对应的引用包下exclusion掉。

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


2.2 不可见的依赖冲突

1)查看服务器使用的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]

触发引起异常的操作,查看加载的类所在的包,与正确的包比较。

补充:

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

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

java 包冲突解决方法

标签:io   os   ar   使用   java   sp   文件   on   log   

原文地址:http://blog.csdn.net/shoren80/article/details/40357909

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!