我们有一个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
值,与dataFile
该report
目标的值相同。进行此更改的主要原因是构建更加灵活和标准,而不依赖artifactId
项目名称(默认名称,但仍不是必需名称),而是使用更通用的${project.build.directory}
属性直接指向target
。
最后说明:确保在build/plugins
部分而非build/pluginManagement/plugins
部分中配置Jacoco插件执行。本pluginManagement
部分用于治理和版本或配置的通用协调,但是如果未在下声明相应的插件,它将被
忽略build/plugins
。
根据官方Maven POM参考
pluginManagement
:是在侧面插件中可以看到的元素。插件管理包含插件元素的方式几乎相同,除了不是为该特定项目构建配置插件信息,而是要配置从该继承的项目构建。
但是,这仅配置在子级的plugins元素内实际引用的插件 。孩子们有权覆盖pluginManagement
定义。
(注意:粗体是我的)
我们有一个Maven多模块项目,由父级(HelloWorld)和不同的子级(HelloWorldServices和HelloWorldPresentation)组成,并使用Jenkins进行构建。 运行成功测试后的错误是
我有一个小的Maven应用程序,它使用JaCoCo进行测试覆盖报告。我不断得到以下错误: 由于缺少执行数据文件,正在跳过JaCoCo执行 这是我的POM。xml文件。我自己删除了项目元素。 这是我的主类,它位于结构下: 这是带有单元测试的类,它位于结构下: 我该如何解决这个问题?
我得到了 我错过了什么?
我正在使用 Maven 3.8.3、JUnit 5.4.2 和 Jacoco 0.8.2,并且我正在尝试创建测试覆盖率报告。 我有一个只有单元测试的项目,但我无法运行报告,我反复收到错误:由于运行时缺少执行数据文件而跳过JaCoCo执行: 以下是我的pom的配置方式: 任何想法,我错过了什么配置?
我将与NetBean IDE 8.1一起使用。 我是Maven和JavaFX打包的新手,所以我期待一些易于使用和理解的东西。
我正在使用Jacoco使用ANT查找单元测试的代码覆盖率,但报告没有生成,我得到了这个错误序列: 我已经阅读了这些答案,但似乎没有一个可以帮助我解决问题。 Jacoco代码覆盖报告生成器显示错误:“捆绑包‘代码覆盖报告’中的类与执行数据不匹配” jacoco:对于报告生成,必须使用与运行时相同的类文件 我在Eclipse上编译了所有类,并使用ANT构建工具对这些类执行代码覆盖。由于一些依赖关系,我