在我的项目中,如果我写这样的pom:
...
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
<execution>
<id>post-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
...
运行mvn install后,它不会在我的项目中生成报告。
但我将其更改为
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
<execution>
<id>pre-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>post-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
它有效!!
我想知道有什么不同?
我在这里阅读了官方文件:http://www.jacoco.org/jacoco/trunk/doc/prepare-agent-mojo.html
目标prepare-agent仅用于jvm代理的set属性,而不是启动jvm代理,为什么有必要?
答案 0 :(得分:4)
您在prepare:agent
上分享的链接已经读了很多内容:
Prepares a property pointing to the JaCoCo runtime agent that can be passed as a VM argument to the application under test.
因此,如果目标没有绑定到插件执行,那么对于打包类型eclipse-test-plugin,属性的默认行为可以是argLine
或tycho.testArgLine
。
在您的情况下,如果我们假设其argLine
,并且您的项目定义了测试执行的VM参数,则需要确保它们包含此属性。
在maven-surefire-plugin的情况下执行此操作的方法之一是 使用语法进行后期属性评估:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>@{argLine} -your -extra -arguments</argLine>
</configuration>
</plugin>
详细的Java Agent
文档可以帮助您更深入地了解Jacoco如何使用自己的代理提供机制,该机制允许在类加载期间内存预处理所有类文件,而不依赖于应用程序框架的