`

包冲突问题的解决方法

阅读更多
包冲突是开发过程中很常见的问题:
其表现有:
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>
3
0
分享到:
评论
1 楼 kely39 2016-07-19  
感谢楼主,问题已解决

相关推荐

    解决网上应用厅部署在was上jar包冲突问题

    ### 解决网上应用厅部署在WAS上JAR包冲突问题 #### 背景介绍 在企业级应用开发与部署的过程中,经常会遇到各种技术挑战,其中之一就是在WebSphere Application Server (WAS) 上部署应用程序时遇到的JAR包冲突问题。...

    websphere下部署CXF项目jar包冲突问题解决方式

    "websphere下部署CXF项目jar包冲突问题解决方式"这一主题聚焦于如何在IBM Websphere Application Server (WAS)中成功部署包含Apache CXF Web服务的WAR包,解决由于类加载导致的运行异常。 Apache CXF是一个流行的...

    SSH包冲突问题解决_sqlserver

    ### SSH包冲突问题解决_sqlserver #### 背景与问题描述 在开发基于SSH(Struts、Spring、Hibernate)框架的应用程序时,经常会遇到由于不同框架之间或框架内部依赖库版本不一致导致的包冲突问题。这类问题往往表现...

    xfire与cxf包冲突解决方案

    故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire.wsdl11.parser.WSDLServiceBuilder org....

    xfire与cxf包冲突解决方法

    故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire.wsdl11.parser.WSDLServiceBuilder org....

    cxf和xfire的jar包冲突解决

    这个问题在标题“cxf和xfire的jar包冲突解决”中得到了明确指出。 Apache CXF是一个全面的服务开发框架,它支持SOAP、RESTful Web服务,以及多种协议和绑定。而XFire是CXF的前身,也是一个强大的Web服务框架,但它...

    如何在was中解决jar包冲突.pdf

    解决 jar 包冲突问题需要深入了解 WAS 中类加载器的工作机制,并根据实际情况选择合适的解决方法。 本文还详细介绍了 WAS 中类加载器的层次结构,包括 JVM Class loader、WebSphere Extensions Class loader、...

    spring+hibernate包冲突问题

    2. **解决方法**: - **使用Maven或Gradle**:通过构建工具来管理依赖,避免手动导入jar包,它们可以自动处理依赖树,减少冲突可能性。 - **排除冲突的依赖**:在构建工具的配置文件中,可以使用`exclude`标签排除...

    将应用部署在weblogic中于axis2冲突的问题及解决方案

    其中, `&lt;prefer-web-inf-classes&gt;true&lt;/prefer-web-inf-classes&gt;` 配置项用于解决项目中的包与Weblogic的包冲突的问题。当Weblogic启动遇到包冲突问题时,优先加载项目WEB-INF\lib目录下的包。 解决方案 解决该...

    weblogic部署项目jar冲突解决

    提供的文件`weblogic部署项目中jar包冲突解决方法.txt`可能包含了具体的解决步骤和案例,建议仔细阅读。而`util.zip`可能是某个实用工具或示例代码,解压后查看其内容,可能会提供更多的解决思路。 总之,解决...

    SSH整合jar包,彻底解决集成jar包冲突问题

    解决SSH集成jar包冲突的问题,首先需要对每个框架的jar包进行精简,只保留必需的部分。通常,这一步可以通过Maven或Gradle等构建工具来完成,通过设置正确的依赖管理和排除规则,确保每个jar包的版本和依赖关系得到...

    osgi解决不同版本jar包冲突的demo

    OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许在单个JVM上运行多个版本的相同库或服务,从而解决了不同版本jar包冲突的问题。本示例通过一个名为“myself”的工程,展示了如何...

    检查jar包冲突

    总之,`jar`包冲突是Java开发中常见的问题,需要通过有效的检查方法和策略来管理和解决。理解这些知识点,有助于确保项目的稳定性和可靠性。在日常开发中,应该养成良好的依赖管理习惯,及时处理冲突,以保证软件的...

    CSP最小冲突法解决n皇后问题

    - **冲突解决**:选择冲突最多的皇后,调整其位置,不断尝试减少冲突。 - **结束条件**:当所有皇后都没有冲突时,找到了一个解决方案;如果所有可能的位置都尝试过且仍然存在冲突,则表示无解。 在实际编程实现中...

    jar包冲突检测工具.zip

    "jar包冲突检测工具"正是为了解决这个问题而设计的。 这个工具的主要功能是帮助开发者检测出项目中可能存在的jar包冲突。它的工作原理可能是通过遍历指定路径下的所有jar文件,然后对比每个jar中的类文件,找出具有...

    Jar包冲突问题原理及解决方案

    Jar包冲突问题原理及解决方案 ...Jar 包冲突是一个常见的问题,了解 Jar 包冲突的原理和解决方法可以帮助我们更好地解决项目中的问题。本文通过实例分析和解决方法,旨在帮助大家更好地理解和解决 Jar 包冲突问题。

    jar冲突问题解决方法记录

    解决jar冲突的方法多种多样,以下是一些常用的技术和策略: 1. **排除依赖**:在Maven或Gradle等构建工具中,可以通过排除特定依赖来避免冲突。例如,在Maven中,可以在依赖管理部分添加`exclusions`标签来排除不...

Global site tag (gtag.js) - Google Analytics