由于我在 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,所以我在父级中设置了这个插件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
所有项目都有这个文件/target
文件夹:jacoco.exec
;但是这个项目使用了spring-instrument
没有这个文件。
我认为问题在于Jacoco希望使用asm
of spring-instrument
但它失败了(但我不确定我是对的)。
The Jacoco版本是0.6.3.201306030806
.
为什么Jacoco在这种情况下无法检测?
我怎样才能克服这个问题?
我想也许我可以配置maven-编译器-插件将代码编译到 1.6 然后我就不需要maven-surefire-插件插入。是否有意义?
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 http://sourceforge.net/p/eclemma/discussion/614869/thread/3d875388 ).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)