包冲突问题的解决方法

编程技术  /  houtizong 发布于 3年前   88
包冲突是开发过程中很常见的问题:
其表现有:
1.明明在eclipse中能够索引到某个类,运行时却报出找不到类。
2.明明在eclipse中能够索引到某个类的方法,运行时却报出找不到方法。
3.类及方法都有,以正确编译成了.class文件,在本机跑的好好的,发到测试或者正式环境就
抛如下异常:
java.lang.NoClassDefFoundError: Could not initialize class java.lang.VerifyError: ********* Incompatible argument to function

这一类的话八成是包冲突。

此时你在eclipse中用ctrl+shift+T 类名,一般可以看到会有不止一个的这个类,并且位于不同的jar中。
这个时候就要考虑把那些干扰的冲突的包排除。
如果使用maven,则直接如下排除即可。
<dependency><groupId>com.XXX.udc</groupId><artifactId>udc-client</artifactId><version>1.0.4</version><exclusions>    <exclusion>       <groupId>ch.qos.logback</groupId>       <artifactId>logback-classic</artifactId>    </exclusion></exclusions></dependency>

如果没用maven,可能要动手删除一些lib中的jar包了。

2013年3月13日排错记录:
测试环境好好的,预发环境一直报java.lang.NoClassDefFoundError,java.lang.VerifyError。
步骤是:
在eclipse里面通过ctrl+shift+T可以发现。
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.ObjectMapper;
同时存在于两组jar中
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar

jackson-core-lgpl-1.1.0.jar
jackson-mapper-lgpl-1.4.0.jar
第二组jar是我在pom中显示引用的,是我想要的。第一组jar是udc间接依赖的,于是我就把第一组的execution了。
马上就好了。

也就是说,一个工程中所依赖的包如果存在包名、类名的相同的类,在不同的环境下很可能引发加载的不一致问题,
产生冲突,这是一个风险。

还发现一个问题是,在我冲突解决之前,多次重启了预发环境机器,对于同一段代码,下面两个异常会随记出现,似乎
在有潜在包冲突的情况下,即使相同的环境,不同的时刻jvm的加载执行历程都不同:
java.lang.NoClassDefFoundError: Could not initialize class com.taobao.lifemarketweb.util.JackSonUtil

java.lang.VerifyError: (class: org/codehaus/jackson/map/ObjectMapper, method: writeValueAsBytes signature: 
(Ljava/lang/Object;)[B) Incompatible argument to function
        at com.taobao.lifemarketweb.util.JackSonUtil.<clinit>(JackSonUtil.java:20)

排除如下:
<dependency><groupId>com.taobao.udc</groupId><artifactId>udc-client</artifactId><version>1.0.4</version><exclusions>    <exclusion>       <groupId>ch.qos.logback</groupId>       <artifactId>logback-classic</artifactId>    </exclusion>     <exclusion>       <groupId>org.codehaus.jackson</groupId>                       <artifactId>jackson-core-asl</artifactId>    </exclusion>     <exclusion>       <groupId>org.codehaus.jackson</groupId>                       <artifactId>jackson-mapper-asl</artifactId>    </exclusion></exclusions></dependency>
上一篇:Tomcat 一些技巧
下一篇:谁在用Hadoop?

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客