Search This Blog

2013-05-19

查找不同版本的Java类冲突

以前遇到过一次这样的问题,系统一运行就抛出异常,说是某个类的方法未定义,这个类属于JBoss logging。

估计是不同版本的类冲突,去Java HotSpot VM Options - www.oracle.com找到一个选项,TraceClassLoading。挺好用的,加载的每一个类都会打印出来,包括所在的jar包。搜索有问题的类名,能找到不止一个地方,这就是冲突的jar包,删除掉相应的过期类,解决。

具体原因:先前的JBoss logging不是独立的库,后来独立出来了,我用到的两个开源项目使用了不同版本的JBoss logging库,所以就有了两份。

下面是我测试时候的一部分输出:
> java -XX:+TraceClassLoading TempTest
[Opened /usr/java/jdk1.7.0_17/jre/lib/rt.jar]
[Loaded java.lang.Object from /usr/java/jdk1.7.0_17/jre/lib/rt.jar]
输出可能很多,最好把输出重定向到一个文件,以免部分输出丢失。

=文章版本=

20130517

No comments:

Post a Comment