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

Maven Jacoco - multi module project. What is the easiest (centralized?) setup?

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

在这两种方法中,我都必须向每个模块的 pom.xml 添加一个 Jacoco 插件。我还必须向单元 and/or 集成测试插件添加几行。我知道我可以使用 parent-pom 来稍微缩短代码。

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

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

  1. 项目根目录中的 Sonar 项目属性文件。
sonar.projectKey=projectKey
sonar.sources=all source files
sonar.exclusions=someFolders
sonar.java.coveragePlugin=jacoco
sonar.jacoco.reportPaths=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>

如@Maxence Lecointe 所述,您只需将所有插件添加到父 pom.xml 即可。将插件放在 部分而不是 部分。

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

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

享受sipmle demo project