我们有一个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>
我没有在任何一本pom里明确提到过万无一失。我还尝试了在配置中放置argLine的方法,但结果都一样。无论我做什么,JaCoCo.exec文件都从未创建过。至于目标,我用
mvn clean install jacoco:prepare-agent jacoco:report
因为当我省略jacoco目标时,它甚至不显示INFO消息。
6条答案
按热度按时间4smxwvx51#
您不应在安装阶段之后而在安装阶段之前调用代理,因此,不应调用:
你应该调用
主要原因是:代理将不参与构建生命周期,
test
阶段将已经作为install
阶段的一部分执行,然后Maven将按照命令行调用执行代理,但为时已晚。您可能还应该将上面的插件配置更改为:
注意:我删除了配置部分,因为它实际上指向默认值。此外,XML元素在这里是区分大小写的,所以您的
datafile
元素被简单地忽略了,它应该是dataFile
。这同样适用于destFile
。prepare-agent
目标已经使用${project.build.directory}/jacoco.exec
作为默认的destFile
值,这同样适用于report
目标的dataFile
值。这一变化的主要原因是一个更灵活和标准的构建,不依赖于artifactId
作为项目名称(默认,但仍然不是强制性的),而是使用更通用的${project.build.directory}
属性直接指向target
。最后一点:确保在
build/plugins
部分而不是build/pluginManagement/plugins
部分配置Jacoco插件执行。pluginManagement
部分用于版本或配置的治理和共同协调,但如果相应的插件不在build/plugins
下声明,则将被忽略。根据official Maven POM reference
pluginManagement:是一个元素,是沿着边插件。Plugin Management包含插件元素的方式大致相同,不同之处在于它不是为这个特定的项目构建配置插件信息,而是打算配置从这个项目构建继承的项目构建。但是,这只配置子元素中plugins元素实际引用的插件。孩子们完全有权覆盖
pluginManagement
定义。(note:大胆是我的)
fdbelqdn2#
无法创建执行数据文件的原因如下
xeufq47z3#
我今天刚刚处理了这个问题,发现当我在Surefire插件中设置
argLine
参数时(我需要这样做来运行JavaFX相关的测试),即使在您的jacoco-maven-plugin
目标中有prepare-agent
之后,它也会取代默认值。因此,基本上,解决方案是添加原始的argLine,并使用
@{argLine}
附加额外的arg行,如here所示:在那篇文章中提到了分配jacoco代理argline变量
${surefire.argLine}
,但我认为这些步骤是不必要的(至少在我的情况下不是)。idv4meu84#
我认为“destfile”和“datafile”是区分大小写的,所以尝试用“destFile”和“dataFile”替换它们,也许会起作用:)
j13ufse25#
toe950276#
我和你分享我的React可能是别人为他工作