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

时间:2018-05-30 08:50:50

标签: maven sonarqube jacoco-maven-plugin

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

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

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

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

  1. 项目根目录中的Sonar项目属性文件。
  2. 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>
    

1 个答案:

答案 0 :(得分:1)

如@Maxence Lecointe所述,您可以将所有插件添加到父pom中。将插件放在&lt; dependencies&gt;中&lt; dependenciesManagement&gt;中的section和NOT部分。

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

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

享受sipmle demo project