包冲突是开发过程中很常见的问题:
其表现有:
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>
分享到:
相关推荐
在websphere8.5 下部署含有CXFwebservice的war包无法正常启动,...归根结底原因不是找不到类,而是发布后war下的jar与websphere自身平台下的jar冲突了,要解决此问题就要通过在websphere下建立共享库来根除,可参考附件
SSH包冲突问题解决SSH包冲突问题解决_sqlserverSSH包冲突问题解决 包冲突问题解决
故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire.wsdl11.parser.WSDLServiceBuilder org....
故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire.wsdl11.parser.WSDLServiceBuilder org....
jstl Jar包 以及版本冲突问题解决 内附两个版本的Jar包 以及版本冲突解决方法
该文档用于解决在websphere application server 服务部署程序过程中会出现jar包冲突问题
Maven的Jar包冲突问题,经常出现的场景为: 本地运行报NoSuchMethodError,ClassNotFoundException。明明在依赖里有这个Jar包啊。...定位冲突以及解决Jar包冲突的几个简单技巧 如何写一个干净依赖关系的POM文件
SSH整合jar包,彻底解决集成jar包冲突问题,内涵绝大部分常用框架的jar包和一些常用jar包
Jar包冲突问题及解决方案.docx
解决jar包类名冲突问题
Maven类包冲突终极解决小技若干
springboot集成flyway实现数据库版本自动升级及冲突问题解决,灵活实现升级语句的自主执行
压缩包里面有myself工程。里面只有一个类。可以自己创建两个版本的myself的jar包,然后测试osgi解决jar包冲突。
导入jar出现包冲突,可以删除其中一个来解决。都想保留的话可以通过工具修改包名来解决。以gson为例修改包名,可供参考,欢迎指正。
解决jar包冲突的工具类jarjar-1.4.rar,jar包冲突解决方法,解决jar与jar冲突,jar与aar冲突,不想删除任何一个包,只能修改其中一个jar包包名即可解决,解决方法详细请看这篇文章: ...
冲突的问题,会导致CB不能正常关闭, 文本编辑时,右键菜单程序崩溃等问题。 可以通过插件管理,禁用EditorTweaks 这样可以正常使用,中文语言包 中文语言包正确安装位置 例如: D:\codeblocks\share\CodeBlocks\...