我们有一个Maven多模块项目,由父(HelloWorld)和不同的子(HelloWorldServices和HelloWorldPresentation)组成,并使用Jenkins构建。
运行成功测试后的错误是
doc.fromHTML($('#target').html(), 15, 15, {
'width': 170,'elementHandlers': specialElementHandlers
});
之前的行说
[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
这是我定义父pom JaCoCo插件的方式:
[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的情况下,我明确提到了万无一失。我也尝试了你在任何地方找到的argLine配置,但都具有相同的结果。无论我做什么,JaCoCo .exec文件从未创建过。至于目标,我使用
<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>
因为当我省略jacoco目标时,它甚至不显示INFO消息。
答案 0 :(得分:26)
您不应在安装阶段之后但之前调用代理,因此不应调用:
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
值,同样适用于report
目标的dataFile
值。这种更改的主要原因是更灵活和标准的构建,而不是依赖artifactId
作为项目名称(默认,但仍然不是必需的),并使用更通用的${project.build.directory}
属性来直接指向在target
。
最后注意事项:确保在build/plugins
部分而非build/pluginManagement/plugins
部分中配置Jacoco插件执行。 pluginManagement
部分用于版本或配置的治理和通用协调,但如果相应的插件不会在build/plugins
下声明,则忽略。
根据{{3}}
pluginManagement :是一个沿侧插件看到的元素。插件管理以大致相同的方式包含插件元素,除了不是为这个特定的项目构建配置插件信息,它旨在配置从这个继承的项目构建。 但是,这仅配置子项中插件元素中实际引用的插件。孩子们有权覆盖
pluginManagement
定义。
(注意:大胆是我的)
答案 1 :(得分:3)
我认为&#34; destfile&#34;和&#34;数据文件&#34;区分大小写,所以尝试用&#34; destFile&#34;替换它们。和&#34; dataFile&#34;,也许它可以工作:)
答案 2 :(得分:0)
将由于以下原因而无法创建执行数据文件。
-没有测试。
-所有测试都会被忽略。
-Surefire插件丢失。
-未执行JaCoCo的prepare-agent目标,该目标设置了需要配置为surefire的argLine。
-Surefire插件未配置JaCoCo的代理。
答案 3 :(得分:0)
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.5</version>
<configuration>
<target>
<propertyfile file="lombok.config">
<entry key="config.stopBubbling" value="true" />
<entry key="lombok.addLombokGeneratedAnnotation" value="true" />
</propertyfile>
</target>
<excludes>
<exclude>**/domain/**</exclude>
<exclude>**/enumeration/**</exclude>
<exclude>**/exception/**</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<!-- attached to Maven test phase -->
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<!-- Add this checking -->
<execution>
<id>jacoco-check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>PACKAGE</element>
<limits>
<limit>
<counter>INSTRUCTION</counter>
<value>COVEREDRATIO</value>
<minimum>65%</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
</executions>
</plugin>
答案 4 :(得分:0)
I share with you my response may be someone else work for him
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.5</version>
<!-- <configuration>
<excludes>
<exclude>package you want exclude</exclude>
</excludes>
</configuration>-->
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<!-- attached to Maven test phase -->
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<!-- <execution>
<id>jacoco-check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>PACKAGE</element>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.9</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>-->
</executions>
</plugin>