当前位置: 首页 > 知识库问答 >
问题:

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

邬朗
2023-03-14

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

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

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

    null
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个答案

薛欣德
2023-03-14

正如@Maxence Lecointe所提到的,您只需将所有插件添加到父POM中即可。将插件放在 部分中,而不是放在 部分中。

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

  • 多模块项目
  • 单元测试(通过mvn clean install)
  • 集成测试(通过mvn clean install-p integration-test)
  • Jacoco-测试覆盖率(聚合数据文件和聚合报告)
  • FindBugs-代码质量
 类似资料:
  • 问题内容: 我最近开始使用Gradle并替换了我现有的基于Maven的项目。过去我在使用Maven处理多模块构建时遇到很多问题。在处理多模块水龙头时,Gradle呼吸了新鲜空气,但还不是很完美。 我的项目有以下文件夹布局: 我遇到的问题是“ EnterpriseApp1”和“ ClientApplication”都依赖于CommonLib项目。我不知道如何配置“ EnterpriseApp1”构建

  • 本文向大家介绍什么是集成模块?相关面试题,主要包含被问及什么是集成模块?时的应答技巧和注意事项,需要的朋友参考一下 驱动模块、存根模块

  • 我的问题似乎类似于运行在Quarkus(gradle)上的多模块项目中的ClassCastException。 不过我用的是maven。我可以确认在使用转轮或测试时没有出现问题。我创建了一个示例应用程序,在https://github.com/AmsterdamFilho/quarkus-poc. 如果在开发模式下运行应用程序,并使用swagger ui或curl执行endpoint,则会出现异常

  • springboot多模块项目中,vo,dto应该放在那一层比较合适? 如题,假设项目有如下包 demo-web demo-service demo-dao demo-common vo,dto应该放在那一层比较合适? dao层放mapper和DO(也就是和数据库表对应的类) 是毋庸置疑的。 VO我的理解是返回给前端页面的对象,按理说应该放在web模块比较合适,但是有时候我们可以在dao层直接写个

  • 问题内容: 我有学习的背景和思想。 我喜欢使用的其中一项功能是可以将项目制作为多Maven模块。例? 令人高兴的是,每个模块都可以具有自己的依赖性,并且可以独立测试它们,而不用运行一个整体应用程序。 我们如何实现类似的东西,或者它的生态系统? 问题答案: 你绝对可以做到的。这被称为SBT Multi-Project build。您可以使用以下内容定义一个主项目和多个子项目(来自上面的docs链接)

  • 我曾广泛使用过Maven 目前有5个不同的maven项目,每个项目都有一个不同的pom.xml。到目前为止,它们之间存在依赖关系,如果需要,每一个都指向 中的另一个。 现在我们不喜欢的是 当我们发布子projectA时,我们需要手动修改所有将projectA作为依赖项的项目以使用新版本。Saw Maven有一个版本插件,不知道这会有什么帮助。 作为解决方案,我希望在POM之间有一个更干净的组织,并