目录
- 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>