我在我的一个模块中通过JaCoCo生成AHP报告时遇到了麻烦.构建开始时,我看到JaCoCo正确设置了argLine:
[INFO] jacoco.agent.argLine set to -javaagent:<...>/.m2/repository/org/jacoco/org.jacoco.agent/0.7.2.201409121644/org.jacoco.agent-0.7.2.201409121644-runtime.jar=destfile=<...>/target/jacoco.exec
Run Code Online (Sandbox Code Playgroud)
但是,maven尝试运行JaCoCo时尚未创建.exec:
[INFO] Skipping JaCoCo execution due to missing execution data file:<...>/target/jacoco.exec
Run Code Online (Sandbox Code Playgroud)
在maven跳过JaCoCo执行后,jacoco.exec最终会被创建.因此,如果我在没有清理的情况下重新运行构建,我仍然可以生成AHP报告.
我已经在其他各种问题中看到,我需要小心使用Maven Surefire和JaCoCo.但是,我没有在我的Surefire插件或任何插件中明确使用argLine.我开始怀疑其他插件之一是否像JaCoCo一样自动劫持argLine参数.
以下是使用的所有插件的列表:
我确实在构建输出中看到一条可疑消息:
[INFO] --- maven-compiler-plugin:3.0:compile (default-compile) @ <module> ---
[INFO] Changes detected - recompiling the module!
Run Code Online (Sandbox Code Playgroud)
我不确定这是否相关,但它在跳过消息之前出现了两次,并且没有出现在JaCoCo正常工作的模块中.
有任何想法吗?
*编辑 - 这是jacoco配置
<plugins>
<...>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.jacoco</groupId>
<artifactId>
jacoco-maven-plugin
</artifactId>
<versionRange>
[0.7.2.201409121644,)
</versionRange>
<goals>
<goal>prepare-agent</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore></ignore>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
Run Code Online (Sandbox Code Playgroud)
我不确定该插件管理部分究竟在做什么,但是评论它并没有解决任何问题.我也尝试将JaCoCo插件配置置于surefire/failsafe配置之上,以便对于共享相同目标的插件有重要意义,但这也无济于事.
*编辑2 - 看起来问题是肯定的包括.评论它们以某种方式修复了JaCoCo的.exec生成,并且JaCoCo正常工作.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<configuration>
<!-- <includes>
<include>**/unit/**/*Test*.java</include>
</includes> -->
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
谁知道为什么?
为了解决这个问题,我将使用以下三个步骤:
确定哪个插件执行正在生成jacoco.exec文件。为此,您可以在启用调试日志记录的情况下运行 Maven ( mvn -X) 并jacoco.agent.argLine在输出中查找属性名称或其值。如果mvn help:effective-pom相关配置来自父 POM,您还可以查看有效 POM ( )。请注意,我的猜测是它是maven-failsafe-plugin.
确定执行插件的阶段。例如,maven-failsafe-plugin这可能是integration-test.
更改 JaCoCo 插件的配置,以便report在构建生命周期稍后执行目标。例如,如果jacoco.exec文件是在integration-test阶段中生成的,则您可以report在post-integration-test阶段中执行目标。
只是已经给出的答案的补充。可能发生的是,在您的maven-surefire-plugin配置中,您已经使用argLine配置来覆盖诸如所使用的内存之类的东西。如果这样做,则无法使用由jacoco-maven-plugin设置的argline,而不会生成jacoco报告。在这种情况下,将属性名称分配给jacoco-maven-plugin配置,然后在您的maven-surefire-plugin argLine参数中引用它。
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
<!-- prepare agent for measuring unit tests -->
<execution>
<id>prepare-unit-tests</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<append>true</append>
<destFile>${sonar.jacoco.reportPath}</destFile>
<!-- Sets the VM argument line used when unit tests are run. -->
<propertyName>surefireArgLine</propertyName>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<printSummary>false</printSummary>
<redirectTestOutputToFile>true</redirectTestOutputToFile>
<forkCount>3</forkCount>
<reuseForks>true</reuseForks>
<argLine>${surefireArgLine} -Xmx1024m -noverify</argLine>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33098 次 |
| 最近记录: |