转载请注明出处:http://xuantan.iteye.com/blog/1929727
- 描述一下具体场景:
环境:本地开发环境,windows7+Eclipse+HSF Jetty(HSF Jetty作为启动容器)
Defensor在进行增量覆盖率功能开发时,出现了一个诡异的问题————代码运行阶段,对一个类中的方法进行调用,报如下错误信息:
分析&解决过程:
1、正常情况应该调用tcc-emma-3.2.0.jar(对应本地tcc-emma工程)中的reportCommand类,此类中确实存在getProjectCoverageFromThread()方法
2、那为什么会报找不到此方法?第一感觉,Jar包冲突了。
3、在调用处的上方添加如下语句
reportCommand.class.getProtectionDomain().getCodeSource();
注:此行代码含义为————真实加载的具体类的路径信息。
执行到上面的代码,通过eclipse的Inspect可以看到:
真实加载的类路径为:
D:\.m2\repository\com\taobao\test\tcc-maven-plugin\1.0.8-SNAPSHOT\tcc-maven-plugin-1.0.8-SNAPSHOT.jar
4、目前为止,已经分析出确实是Jar包冲突问题导致运行时加载了错误的类。但是这个错误的jar包是在父工程pom依赖进来,且pom中的配置为scope=test,也就是说只有在构建工程的测试阶段才会加载此jar包,而在工程提供服务的运行阶段是不会加载此Jar的。并且通过查看最终编译打出的war包,确实也没有此jar。
5、为什么会在运行期间加载了scope=test的Jar包里的类呢?分析到这里,聪明的读者应该会想到是Eclipse的问题所导致,它将测试阶段引用到的jar包也加入进了运行期class path中,而且加载的优先级高于tcc-emma工程中的同名类。
6、尝试了多种方法,均无法将tcc-maven-plugin-1.0.8-SNAPSHOT.jar从加载过程中移除。最终,通过调整Eclipse中的Build class path顺序解决了这个问题,也就是明确告诉容器启动时优先加载tcc-emma工程中的同名类。见下图:
PS: 查看class真实归属的jar包位置
getClass().getClassLoader().getResource(getClass().getName().replace('.', '/') + ".class")
相关推荐
在websphere8.5 下部署含有CXFwebservice的war包无法正常启动,...归根结底原因不是找不到类,而是发布后war下的jar与websphere自身平台下的jar冲突了,要解决此问题就要通过在websphere下建立共享库来根除,可参考附件
检查jar包冲突检查jar包冲突检查jar包冲突检查jar包冲突
解决jar包冲突的工具类jarjar-1.4.rar,jar包冲突解决方法,解决jar与jar冲突,jar与aar冲突,不想删除任何一个包,只能修改其中一个jar包包名即可解决,解决方法详细请看这篇文章: ...
Springboot 打Jar包,Maven完美解决本地Jar包自动打入Springboot Jar包中
压缩包里面有myself工程。里面只有一个类。可以自己创建两个版本的myself的jar包,然后测试osgi解决jar包冲突。
本地环境和测试环境运行的好好的,到了生产就报一堆NoSuchMethodError,是我人品有问题还是生产环境有问题!? 这样的问题如果不熟悉maven依赖机制的同学排查起来,估计挺头痛的。 而且maven依赖结构不好的项目,在...
easyExcel支持最低的POI版本是3.17,现有项目若已用POI版本比这高的话,希望不改变现有的引用,解决jar包冲突的话,使用该独立版的jar包。该包已改过包名,亲测可兼容使用,网上有说把poi升级到4.1.2但是试了导出...
SSH整合jar包,彻底解决集成jar包冲突问题,内涵绝大部分常用框架的jar包和一些常用jar包
jar包冲突检测工具。使用方法,将需要检测的多个jar包放在同一路径下,打开工具一键检测生成冲突报告。
该文档用于解决在websphere application server 服务部署程序过程中会出现jar包冲突问题
在tomcat下部署成功,迁移到weblogic下,报错,一般都是配置和jar包问题,配置问题开发根据报错能解决,jar冲突比较烦人,这里给出了解决方案。
检测工具 jar包冲突
ksoap2.jar和小米系统中的jar包冲突,修改ksoap的包名即可。
打开exe程序,选择项目jar包路径,就可以检测冲突的jar包了。
openfire搭建本地开发环境所需jar。 包含:coherence.jar、coherence-work.jar、tangosol.jar、bouncycastle.jar
项目启动后访问页面,页面显示Uncaught initialization Exception created by servlet这个错误.查看日志会报找不到index()的异常。
如何在WebSphere中解决jar包冲突.doc
因与cxf包xmlschema-core-*.jar 冲突 故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire....
构建maven工程时pom.xml中引入依赖时有红色字体,setting处理了,也将jar包的版本号都试了一遍,还是没解决,后来请教大牛,原来是没连网,maven工程加载了一部分jar包,连网之后自动下载的jar包跟之前的冲突,用这...