转载请注明出处: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")
相关推荐
在软件开发过程中,经常需要将多个JAR包合并成一个JAR包,以方便管理和部署。本文将详细介绍如何实现这一过程,并提供具体的操作步骤和技术细节。 ### 一、概述 在Java开发中,项目通常会依赖多个外部库或模块,...
引入JAR包通常有两种方式:一是将JAR添加到项目的类路径中,这样编译器和运行时环境就能找到其中的类和资源;二是通过构建工具(如Maven或Gradle)管理依赖,这样可以自动下载并管理JAR包,同时避免版本冲突问题。 ...
### 手动导入jar包到Maven本地仓库的教程 #### 概述 在Java开发过程中,我们经常需要使用各种第三方库或者自定义组件。这些库或组件通常以jar包的形式提供。Maven作为Java项目中最常用的构建工具之一,能够很好地...
我们将以"android 将项目生成jar包Demo"为例,探讨整个过程。 首先,我们有两个关键工程:一个是生成JAR包的工程,另一个是用于测试JAR包的工程。这两个工程都在名为"jarDemo"的压缩包内。生成JAR包的工程通常包含...
【fat-Jar打包插件】是一种在Java开发中常用的工具,它的主要作用是将一个项目的所有依赖库(包括第三方jar包)与源代码一起打包成一个独立的jar文件,因此被称为"fat"或"uber"jar。这个插件极大地简化了项目的部署...
3. **启用自动启动**:如果jar包没有自动启动,可以在部署目录下创建一个与其同名的`.deployment`文件,使JBOSS在启动时识别并加载该应用,例如: ``` echo. > %JBOSS_HOME%\standalone\deployments\myapp.jar....
Spring框架是Java开发中不可或缺的一部分,它以其...总的来说,Spring框架jar包是Java企业级开发中的重要组成部分,它提供了全面的解决方案,涵盖了从数据访问到Web应用的各个方面,极大地提升了开发效率和代码质量。
在本例中,"最新jacobV1.20.0.jar包" 提供了 Jacob库的最新版本1.20.0,这将有助于开发人员执行高效的文件转换任务。 Jacob库的核心功能在于其动态链接库(DLL)的使用,它使得Java能够与COM组件进行交互。COM组件...
Eclipse作为一个流行的Java集成开发环境(IDE),提供了丰富的插件来增强其功能,其中"eclips插件,用于查找某个class所在的jar包"就是这样一个实用工具。这个插件名为"com.danikenan.eclipse.classlocator_1.0.8",...
【描述】提到"myeclipse版本高用到的fat-jar",这意味着在MyEclipse这款强大的Java集成开发环境中,用户可能需要利用fat-jar技术来打包他们的项目。MyEclipse是一款流行的IDE,尤其适合企业级Java应用程序的开发。...
开发者通常使用`jar`命令行工具或集成开发环境(IDE)如Eclipse、IntelliJ IDEA来创建JAR文件。例如,通过以下命令可以创建一个包含所有类和资源的JAR: ```bash jar cf myapp.jar com/myapp/*.class resources/* ``...
在早期的Android开发环境中(例如ADT版本17之前),我们通常会在项目的src目录下创建一个lib目录,然后将jar包放入该目录,并将其添加到构建路径。这样做是因为当时的构建系统需要明确地指定这些外部依赖。然而,...
在Java开发过程中,Maven是一个不可或缺的构建工具,它帮助我们管理项目的依赖关系,使得代码构建、测试和部署更加高效。然而,有时我们可能会遇到一些问题,比如在尝试导入特定库时遇到困难,如本例中的...
在团队开发环境中,svn帮助开发者同步代码,解决冲突,并记录每次更新的详细信息。 增量打包则是指只包含自上次完整打包以来变化过的文件的打包方式。这对于持续集成和发布流程尤其有用,因为它减少了需要传输的...
实验一 Java 开发环境的安装与配置主要涵盖了Java编程的基础知识,包括开发环境的搭建、基本语法、输入输出处理以及条件判断。以下是详细的内容解析: 首先,Java开发环境的安装通常指的是安装Java Development Kit...
在Java开发环境中,SSH2功能通常通过一系列的Jar包来实现,这些库提供了实现SSH2协议所需的各种组件。 Etoak_james可能是一个特定的项目或者组织,他们可能使用了SSH2协议来构建他们的系统,并且整理了这些相关的...
本文以NCC(NCCloud)环境配置为例,详细阐述了如何一步步搭建和优化开发环境,确保软件开发的顺利进行。 一、开发环境整体结构 NCC环境主要由以下几个部分构成: 1. NC Cloud Home:作为中间件的基础,它包含了...
本文将详细讲解JDK的安装、配置,以及Tomcat的安装和测试,确保初学者能够成功建立一个功能完备的开发环境。 ### 一、JDK的安装与配置 1. **JDK的安装** - JDK安装通常包括两个部分:JDK和JRE。以版本`jdk5.0 ...
标题中的"ant-nodeps-1.6.3.jar.zip"是一个压缩文件,它包含了名为"ant-nodeps-1.6.3.jar"的Java可执行文件(JAR包)以及一个"ant.license.txt"的文本文件。这个JAR包是Apache Ant的一个特殊版本,不含任何外部依赖...
标题中的"phpstrom汉化包.rar"指的是针对PHPStorm这款集成开发环境(IDE)的中文语言包。PHPStorm是一款由JetBrains公司开发的强大的PHP编程工具,它提供了丰富的功能,如代码自动完成、语法高亮、错误检查等,极大...