Maven引入Jacoco插件后无法生成jacoco.exec执行文件

目录

  • jacoco.exec
  • 网上常见关于未生成jacoco.exec原因
  • 最终解决方案
    • 不生效原因
    • 解决方案
  • 完整jacoco插件配置

jacoco.exec

执行数据文件,只有生成该文件,才表示引入插件jacoco成功生效
Maven引入Jacoco插件后无法生成jacoco.exec执行文件_第1张图片

网上常见关于未生成jacoco.exec原因

网上找了一下解决方式基本都是在jacoco中加入propertyName参数,在surefire中的argLine中引入,试了没用
Maven引入Jacoco插件后无法生成jacoco.exec执行文件_第2张图片

最终解决方案

  • 执行不报错
    首先在执行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.jacocogroupId>
    <artifactId>jacoco-maven-pluginartifactId>
    <version>0.8.3version>
    <executions>
        <execution>
            <id>default-prepare-agentid>
            <goals>
                <goal>prepare-agentgoal>
            goals>
        execution>
        <execution>
            <id>default-reportid>
            <phase>testphase>
            <goals>
                <goal>reportgoal>
            goals>
        execution>
    executions>
plugin>
  • 父Pom引入:将jacoco插件移除pluginManagement,单独放在plugins,简单理解全局生效
    Maven引入Jacoco插件后无法生成jacoco.exec执行文件_第3张图片
  • 最终效果
    Maven引入Jacoco插件后无法生成jacoco.exec执行文件_第4张图片

完整jacoco插件配置

<plugins>
    
    <plugin>
        <groupId>org.jacocogroupId>
        <artifactId>jacoco-maven-pluginartifactId>
        <version>0.8.3version>
        
        <executions>
            <execution>
                <id>default-prepare-agentid>
                <goals>
                    <goal>prepare-agentgoal>
                goals>
            execution>
            <execution>
                <id>default-reportid>
                <phase>testphase>
                <goals>
                    <goal>reportgoal>
                goals>
            execution>
        executions>
     plugin>
     <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-surefire-pluginartifactId>
        <version>2.22.1version>
        <configuration>
            <skipTests>falseskipTests>
            
            <includes>
                <include>**/*Test.javainclude>
            includes>
        configuration>
    plugin>
    
plugins>

你可能感兴趣的:(工具,maven,数据库,java,jacoco,surefire)