在jacoco-maven-plugin中是否需要准备代理目标?

时间:2017-08-31 03:08:25

标签: java maven jacoco

在我的项目中,如果我写这样的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代理,为什么有必要?

1 个答案:

答案 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,属性的默认行为可以是argLinetycho.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如何使用自己的代理提供机制,该机制允许在类加载期间内存预处理所有类文件,而不依赖于应用程序框架