目录
- jacoco.exec
- 网上常见关于未生成jacoco.exec原因
- 最终解决方案
- 不生效原因
- 解决方案
- 完整jacoco插件配置
jacoco.exec
执行数据文件,只有生成该文件,才表示引入插件jacoco成功生效
网上常见关于未生成jacoco.exec原因
网上找了一下解决方式基本都是在jacoco中加入propertyName参数,在surefire中的argLine中引入,试了没用
最终解决方案
- 执行不报错
首先在执行mvn clean test的时候,并没有报错,执行成功,而且生成了surefire-reports目录(会产生Test相关文件,Allure Report
会用到这些文件)
后面突然看到了pluginManagement,然后想起了dependencyManagement,问题就这么解决了 - 术语解释
- pluginManagement:插件管理,只表示插件声明,Maven不会加载该插件,在父POM中定义,提供给子POM使用,子模块中不需要关心版本,由pluginManagement统一管理;
- plugins:就是直接引入一个plugin,在父POM中定义后,所有子模块都会继承引用
- dependencyManagement:依赖管理,只是声明依赖,并不实现引入,在父POM中定义,提供给子POM使用,子模块中不需要关心版本
- dependencies:直接引入依赖,若定义在父POM中,即使在子项目中不需要,子项目仍然会引入该依赖
不生效原因
jacoco插件放在父Pom的pluginManagement中,子模块没有单独引用,因此没有生效
解决方案
- 子pom单独引入:jacoco插件配置,只需要引入jacoco,不需要引入surefire
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.3</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
- 父Pom引入:将jacoco插件移除pluginManagement,单独放在plugins,简单理解全局生效
- 最终效果
完整jacoco插件配置
<plugins>
<!-- jacoco start -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.3</version>
<!-- <configuration> 生成不了jacoco.exec 放开注释试试
<propertyName>jacocoArgLine</propertyName>
</configuration> -->
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<skipTests>false</skipTests>
<!-- <forkMode>once</forkMode> 生成不了jacoco.exec 放开注释试试
<argLine>-Dfile.encoding=UFT-8 ${jacocoArgLine}</argLine> -->
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
<!-- jacoco end -->
</plugins>