当前位置:首页 > 开发 > 行业应用 > 正文

包冲突问题的解决方法

发表于: 2013-03-12   作者:bingyingao   来源:转载   浏览:
摘要: 包冲突是开发过程中很常见的问题: 其表现有: 1.明明在eclipse中能够索引到某个类,运行时却报出找不到类。 2.明明在eclipse中能够索引到某个类的方法,运行时却报出找不到方法。 3.类及方法都有,以正确编译成了.class文件,在本机跑的好好的,发到测试或者正式环境就 抛如下异常: java.lang.NoClassDefFoundError: Could not in
包冲突是开发过程中很常见的问题:
其表现有:
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>

包冲突问题的解决方法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
背景 使用淘宝diamond配置工具出现无法配置情况。 在分析代码、依赖和确认diamond工作无误仍不得解
随着业务需求的不断扩展,应用中代码量也会逐渐增长,工程中引用的二方包或者三方包也自然而然会越
环境配置:weblogic12C Struts2.1.8+Spring2.5+Hibernate 3.3 问题描述:项目在tomcat7下运行正常,
问题描述:本人的项目是用Maven管理,而且用到了servlet3.0的技术,但是项目中用到servlet3.0的地方
问题描述:本人的项目是用Maven管理,而且用到了servlet3.0的技术,但是项目中用到servlet3.0的地方
今天遇到Maven下Jar包冲突问题. 由于Maven jar包是自动依赖..但是jar包依赖的版本不一样 ..会造成冲
在测试脚本编写和应用部署时,经常遇到的一 个问题是 :java.lang.NoSuchMethodError。这个问题产生
myeclipse的javaee环境中集成了一些多余的包,比如jpa1.0的东西,如果项目中用到了高版本的jpa可能
tomcat类加载器及jar包冲突问题分析 开发过程中遇到过这样一个情况,在本地tomcat下开发调试正常,
当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API)。TCP/
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号