2

由于我在使用带有 Java 7 的 cobertura 时遇到了一些问题 - 我正在尝试Jacoco。我的项目有一个父pom.xml项目和子项目。在一个项目中,我使用 spring 来运行一些集成测试——所以我在这个项目中有这个插件pom.xml

<plugin>
    <version>2.12.4</version>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <!-- -XX:-UseSplitVerifier is for java 7 -->
        <argLine>
            -XX:-UseSplitVerifier 
            -javaagent:${settings.localRepository}/org/springframework/spring-instrument/${spring.version}/spring-instrument-${spring.version}.jar
        </argLine>
    </configuration>
</plugin>

因为我使用 Java 7,所以我在 parent 中设置了这个插件pom.xml

<plugin>
    <version>2.5.1</version>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
    <source>1.7</source>
    <target>1.7</target>
    <optimize>true</optimize>
    <debug>true</debug>
    <showDeprecation>true</showDeprecation>
    <showWarnings>true</showWarnings>
    <encoding>utf8</encoding>
    </configuration>
</plugin>

现在,当我使用mvn clean install所有项目时,文件夹中有这个文件/targetjacoco.exec ; 但是这个使用的项目spring-instrument没有这个文件。我认为问题在于Jacoco希望使用asmofspring-instrument但它失败了(但我不确定我是对的)。

Jacoco版本0.6.3.201306030806.

为什么Jacoco在这种情况下无法使用仪器?我该如何克服呢?

我想也许我可以配置maven-compiler-plugin将代码编译为 1.6,然后我就不需要maven-surefire-plugin插件了。是否有意义?

4

2 回答 2

3

由 Jacoco Maven 插件定义的 argLine 值正在被 Surefire 插件重写。

在“jacoco-maven-plugin”配置中设置一个属性名称,如下所示:

<propertyName>coverageAgent</propertyName>

然后在你的surefire插件配置中编辑argLine,使其包含Jacoco的代理:

<argLine>
    -XX:-UseSplitVerifier
    ${coverageAgent} 
    -javaagent:${settings.localRepository}/org/springframework/spring-instrument/${spring.version}/spring-instrument-${spring.version}.jar
</argLine>

请注意,Jacoco 的代理位于 Spring 的 Instrument 之前。应该这样做是因为 Jacoco 在处理修改后的字节码(例如 AspectJ LTW 产生的字节码)时遇到了问题。

实际上,即使是第一个代理,Jacoco 的报告仍然可能是错误的,但问题通常仅限于一小部分情况(例如http://sourceforge.net/p/eclemma/discussion/614869/thread/3d875388) .

于 2013-07-21T15:49:16.033 回答
2

我的猜测是 JaCoCo 也使用 java 命令行,因为它可能是作为 javaagent 实现的。

弹簧仪器 javaagent 会覆盖 JaCoCo 吗?

于 2013-06-19T10:22:27.107 回答