Java 类路径上具有asm的cobertura问题

Java 类路径上具有asm的cobertura问题,java,hibernate,spring,maven,cobertura,Java,Hibernate,Spring,Maven,Cobertura,我已经使用maven、Spring2.5.6、Hibernate3.2.6和最近添加的用于代码覆盖率分析的Cobertura1.9rc1进行了项目设置 我遇到的第一个问题是与类路径相关的错误,因为类路径上有两个不同版本的asm.jar。只有在运行JUnit测试并尝试加载spring应用程序上下文时,才会出现此问题 根据cobertura项目主页上的常见问题: 为什么Cobertura导致我与ASM发生类路径冲突 Cobertura使用ASM修改字节码。还有一些其他流行的程序使用ASM;Groov

我已经使用maven、Spring2.5.6、Hibernate3.2.6和最近添加的用于代码覆盖率分析的Cobertura1.9rc1进行了项目设置

我遇到的第一个问题是与类路径相关的错误,因为类路径上有两个不同版本的asm.jar。只有在运行JUnit测试并尝试加载spring应用程序上下文时,才会出现此问题

根据cobertura项目主页上的常见问题:

为什么Cobertura导致我与ASM发生类路径冲突

Cobertura使用ASM修改字节码。还有一些其他流行的程序使用ASM;Groovy和Hibernate,举两个例子。如果Cobertura使用不同版本的asm,并且将两个版本都添加到类路径中,则可能会出现问题

Cobertura仅在检测时使用ASM。在运行测试时,Cobertura在类路径中不需要ASM。如果您看到类路径冲突,只需确保Cobertura附带的asm jar仅由Cobertura使用,并且仅在检测时使用

因此,在我的项目pom中,我将依赖项配置如下:

<dependency>
                <groupId>net.sourceforge.cobertura</groupId>
        <artifactId>cobertura</artifactId>
        <version>1.9rc1</version>
        <exclusions>
            <exclusion>
                <groupId>asm</groupId>
                <artifactId>asm</artifactId>
            </exclusion>
            <exclusion>
                <groupId>asm</groupId>
                <artifactId>asm-attrs</artifactId>
            </exclusion>
        </exclusions>
</dependency>

net.sourceforge.cobertura
科贝图拉
1.9rc1
asm
asm
asm
asm属性
现在我可以从eclipse运行单元测试了,我的应用程序也可以在服务器上正常运行

但是,当我在我的项目上运行mvn cobertura:cobertura时,我得到以下错误: java.lang.NoClassDefFoundError:net/sourceforge/cobertura/coveragedata/TouchCollector


我认为这是因为类路径上有错误的asm.jar。但是,如cobertura常见问题解答中所述,我还可以如何解决这个类路径冲突呢?

要配置maven cobertura插件,您应该将其添加到
部分,而不是作为
-我假设您的项目代码不需要cobertura来编译

运行
mvn cobertura:cobertura
时,您引用的
部分将不会被引用

例如:

<plugins>
  ...
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>cobertura-maven-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        ...
    </configuration>
  </plugin>
</plugins>

...
org.codehaus.mojo
cobertura maven插件
2.4
...

即使在2013年也有不错的建议。应该被标记为答案。