Maven Jacoco-多模块项目。最简单的(集中的)设置是什么?

Maven Jacoco-多模块项目。最简单的(集中的)设置是什么?,maven,sonarqube,jacoco-maven-plugin,Maven,Sonarqube,Jacoco Maven Plugin,对于Maven多模块项目,我可以通过JacocoMaven插件报告代码覆盖率。我知道两种工作方法。我在下面描述的第一种方法。第二种方法是将Maven模块的所有jacoco结果附加到项目根目录中的1 jacoco.exec文件中 在这两种方法中,我都必须向每个模块的pom.xml中添加一个Jacoco插件。此外,我还必须为单元和/或集成测试插件添加几行代码。我知道我可以使用父pom将代码缩短一点 问题:我真的需要向每个模块的pom.xml文件中添加jacoco插件(以及修改的surefire/fa

对于Maven多模块项目,我可以通过JacocoMaven插件报告代码覆盖率。我知道两种工作方法。我在下面描述的第一种方法。第二种方法是将Maven模块的所有jacoco结果附加到项目根目录中的1 jacoco.exec文件中

在这两种方法中,我都必须向每个模块的pom.xml中添加一个Jacoco插件。此外,我还必须为单元和/或集成测试插件添加几行代码。我知道我可以使用父pom将代码缩短一点

问题:我真的需要向每个模块的pom.xml文件中添加jacoco插件(以及修改的surefire/failsave插件)吗? 是否可以在项目根目录中仅在项目文件夹中定义一次jacoco插件

好的,详细说明方法1,这就是我使用的方法

  • 项目根目录中的Sonar项目属性文件 sonar.projectKey=projectKey
    sonar.sources=所有源文件
    sonar.Exclutions=someFolders
    sonar.java.coveragePlugin=jacoco
    sonar.jacoco.reportpath=module1/target/jacoco.exec,module2/target/jacoco.exsonar.projectName=projectName
    sonar.java.binaries=*/target/classes
    Maven的基本部分是:

    <build>
       <plugins>
          <plugin>
             <groupId>org.jacoco</groupId>
             <artifactId>jacoco-maven-plugin</artifactId>
             <version>${jacoco-maven-plugin-version}</version>
             <configuration>
                <propertyName>jacoco.agent.argLine</propertyName>
             </configuration>
             <executions>
                <execution>
                   <id>jacoco-init</id>
                   <goals>
                      <goal>prepare-agent</goal>
                   </goals>
                </execution>
                <execution>
                   <id>jacoco-site</id>
                   <phase>verify</phase>
                   <goals>
                      <goal>report</goal>
                   </goals>
                </execution>
             </executions>
          </plugin>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>${surefire.plugin.version}</version>
              <configuration>
                 <argLine>${jacoco.agent.argLine}</argLine>
                  <excludes>
                      <exclude>**/integration/**/*.java</exclude> 
                      <exclude>**/*$*.*</exclude>
                  </excludes>
              </configuration>
          </plugin>
          <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-failsafe-plugin</artifactId>
               <version>${failsafe.plugin.version}</version>
               <configuration>
                  <argLine>${jacoco.agent.argLine}</argLine>
                  <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
               </configuration>
               <executions>
                 ...
               </executions>
           </plugin>
         </plugins>
    
    
    org.jacoco
    jacocomaven插件
    ${jacoco maven插件版本}
    jacoco.agent.argLine
    雅科科尼特酒店
    配制剂
    杰科科遗址
    验证
    报告
    org.apache.maven.plugins
    maven surefire插件
    ${surefire.plugin.version}
    ${jacoco.agent.argLine}
    **/集成/***.java
    **/*$*.*
    org.apache.maven.plugins
    maven故障保护插件
    ${failsafe.plugin.version}
    ${jacoco.agent.argLine}
    ${project.build.directory}/surefire报告
    ...
    
    正如@Maxence-Lecointe所提到的,您可以将所有插件添加到父pom中。将插件放在节中而不是节中

    扫描了许多解决方案后,我创建了一个简单但完整的Jacoco演示项目,显示:

    • 多模块项目
    • 单元测试(通过mvn清洁安装)
    • 集成测试(通过mvn清洁安装-P集成测试)
    • Jacoco-测试覆盖率(聚合数据文件和聚合报告)
    • FindBugs-代码质量

    享受这一天

    在我看来,jacoco插件应该只出现在父pom中,有什么问题吗?您的项目存在一些依赖性问题。如果清理本地m2存储库并安装mvn,您将看到缺少两个依赖项。您的模块1在模块3中有错误的groupId声明。我在本地主机上有一个sonar实例,当我在您的项目上执行此命令时,我没有覆盖率(0.0%),您是否尝试在本地(或远程)sonarqube上部署覆盖率<代码>mvn清洁安装声纳:声纳-腰肌,全部测试很久以前,我有一个本地声纳(docker?)实例并将其修复。我在工作中也遇到过类似的问题,但我忘了如何解决。不,不是docker。只是Windows上的一个实例。在maven日志中,您将看到跳过了测试工具(或如何调用它)。这可能会给出“为什么”的线索。sonar在一个配置文件中查找源。看看web上项目插件(单元和/或集成)的配置。
    <build>
       <plugins>
          <plugin>
             <groupId>org.jacoco</groupId>
             <artifactId>jacoco-maven-plugin</artifactId>
             <version>${jacoco-maven-plugin-version}</version>
             <configuration>
                <propertyName>jacoco.agent.argLine</propertyName>
             </configuration>
             <executions>
                <execution>
                   <id>jacoco-init</id>
                   <goals>
                      <goal>prepare-agent</goal>
                   </goals>
                </execution>
                <execution>
                   <id>jacoco-site</id>
                   <phase>verify</phase>
                   <goals>
                      <goal>report</goal>
                   </goals>
                </execution>
             </executions>
          </plugin>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>${surefire.plugin.version}</version>
              <configuration>
                 <argLine>${jacoco.agent.argLine}</argLine>
                  <excludes>
                      <exclude>**/integration/**/*.java</exclude> 
                      <exclude>**/*$*.*</exclude>
                  </excludes>
              </configuration>
          </plugin>
          <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-failsafe-plugin</artifactId>
               <version>${failsafe.plugin.version}</version>
               <configuration>
                  <argLine>${jacoco.agent.argLine}</argLine>
                  <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
               </configuration>
               <executions>
                 ...
               </executions>
           </plugin>
         </plugins>