JaCoCo与Maven-缺少执行数据文件

我们有一个Maven多模块项目,其中包含一个父级(HelloWorld)和不同的子级(HelloWorldServices和HelloWorldPresentation),并使用Jenkins进行构建。

运行成功的测试后的错误是

[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:report (default-cli) @ HelloWorldServices ---

[INFO] Skipping JaCoCo execution due to missing execution data file:/var/lib/jenkins/workspace/HelloWorld/HelloWorldServices/target/jacoco.exec

前面的线说

[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:prepare-agent (default-cli) @ HelloWorldServices ---

[INFO] argLine set to -javaagent:/var/lib/jenkins/.m2/repository/org/jacoco/org.jacoco.agent/0.7.6.201602180812/org.jacoco.agent-0.7.6.201602180812-runtime.jar=destfile=/var/lib/jenkins/workspace/HelloWorld/HelloWorldServices/target/jacoco.exec

这是我定义父pom JaCoCo插件的方式:

<plugin>

<groupId>org.jacoco</groupId>

<artifactId>jacoco-maven-plugin</artifactId>

<version>0.7.6.201602180812</version>

<configuration>

<destfile>${project.artifactId}/target/jacoco.exec</destfile>

<datafile>${project.artifactId}/target/jacoco.exec</datafile>

</configuration>

<executions>

<execution>

<id>jacoco-initialize</id>

<goals>

<goal>prepare-agent</goal>

</goals>

</execution>

<execution>

<id>jacoco-site</id>

<phase>package</phase>

<goals>

<goal>report</goal>

</goals>

</execution>

</executions>

</plugin>

我没有明确提到过surefire。我还尝试了到处都可以找到的将argLine放入配置中的结果,但是所有结果都相同。无论我做什么,都从未创建过JaCoCo

.exec文件。至于目标,我用

mvn clean install jacoco:prepare-agent jacoco:report

因为当我省略jacoco目标时,它甚至不显示INFO消息。

回答:

您不应该在安装阶段之后而是在安装阶段之前调用代理,所以不要调用:

mvn clean install jacoco:prepare-agent jacoco:report

您应该调用

mvn clean jacoco:prepare-agent install jacoco:report

主要原因是:该代理将不参与构建生命周期,该test阶段将已经作为该install阶段的一部分执行,然后Maven将根据命令行调用执行该代理,但为时已晚。


您可能还应该将上述插件配置更改为:

<plugin>

<groupId>org.jacoco</groupId>

<artifactId>jacoco-maven-plugin</artifactId>

<version>0.7.6.201602180812</version>

<executions>

<execution>

<id>jacoco-initialize</id>

<goals>

<goal>prepare-agent</goal>

</goals>

</execution>

<execution>

<id>jacoco-site</id>

<phase>package</phase>

<goals>

<goal>report</goal>

</goals>

</execution>

</executions>

</plugin>

注意:我删除了配置部分,因为它实际上指向默认值。而且,XML元素在这里是区分大小写的,因此您的datafile元素只是被忽略了,应该dataFile改为。同样适用于destFile

prepare-agent目标已被${project.build.directory}/jacoco.exec用作默认destFile值,与dataFilereport目标的值相同。进行此更改的主要原因是构建更加灵活和标准,而不依赖artifactId项目名称(默认名称,但仍不是必需名称),而是使用更通用的${project.build.directory}属性直接指向target


最后说明:确保在build/plugins部分而非build/pluginManagement/plugins部分中配置Jacoco插件执行。本pluginManagement部分用于治理和版本或配置的通用协调,但是如果未在下声明相应的插件,它将被

build/plugins

根据官方Maven POM参考

:是在侧面插件中可以看到的元素。插件管理包含插件元素的方式几乎相同,除了不是为该特定项目构建配置插件信息,而是要配置从该继承的项目构建。

。孩子们有权覆盖pluginManagement定义。

(注意:粗体是我的)

以上是 JaCoCo与Maven-缺少执行数据文件 的全部内容, 来源链接: utcz.com/qa/434436.html

回到顶部