use*_*601 5 code-coverage maven jacoco sonarqube jacoco-maven-plugin
我有一个与 JaCoCo 和 SONAR 的多模块 maven 项目相关的问题。
我有一个父模块和 3 个子模块。
父 |-child1 - pom.xml |-child2 - pom.xml |-child3 - pom.xml |-pom.xml
我在父 pom.xml 中包含了 JaCoCo 插件。当我从父 pom.xml 运行 mvn clean install sonar:sonar build 时,我看到每个孩子都生成了自己的 jacoco.exec 文件。像这样的 child1/target/jacoco.exec, child2/target/jacoco.exec 等。但是,在父级别中没有生成 jacoco.exec 。
当我运行声纳分析时,我看到单元测试覆盖率在声纳仪表板上显示为 0.0%。
我的问题是
1. 我应该怎么做才能看到整个项目的单元测试覆盖率?
2. 为了显示一个单元测试覆盖率,SONAR 是从父级别还是从子级别选择 jacoco.exec 文件?
请帮忙。这对我来说真的是一个障碍。感谢您的所有投入。
我遇到了同样的问题,然后我在每个模块 pom xml 中包含以下内容并且它起作用了:
<!-- Sonar START -->
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
<sonar.language>java</sonar.language>
<jacoco.version>0.7.9</jacoco.version>
<!-- Sonar START -->
Run Code Online (Sandbox Code Playgroud)
插件:
<!-- SONAR config START -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
</configuration>
<executions>
<execution>
<id>agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<tasks>
<echo>Project Base Path (WEB):: ${project.basedir}</echo>
<echo>Jacoco exec target path (WEB):: ${sonar.jacoco.reportPath}</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.2</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.7</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<argLine>${argLine}</argLine>
</configuration>
</plugin>
<!-- SONAR config END -->
Run Code Online (Sandbox Code Playgroud)
并在 Jenkins 中将“目标和选项”配置为:
sonar:sonar
Run Code Online (Sandbox Code Playgroud)
对于运行特定测试:
sonar:sonar -DfailIfNoTests=false -Dtest=<Test Class> test
Run Code Online (Sandbox Code Playgroud)