SonarQube Jacoco 离线检测显示 Maven 多模块项目中的覆盖率为 0%
SonarQube Jacoco offline instrumentation shows 0% coverage in Maven Multi Module Project
我正在使用 Jacoco 离线检测,因为我已将 PowerMockito 用于我的测试用例。我的是 Maven 多模块项目。
我正在使用 PowerMockito 1.65
我的 SonarQube 版本是 6.7
JaCoCo 在每个模块中生成 HTML 个文件,但在 SonarQube 中它显示 0%
我的parentpom.xml
<properties>
<sonar.version>6.7</sonar.version>
<sonar-java.version>4.2</sonar-java.version>
<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
</properties>
<dependencies>
<dependency>
<groupId>org.sonarsource.sonarqube</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonar.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.sonarsource.java</groupId>
<artifactId>sonar-java-plugin</artifactId>
<version>5.0.1.12818</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.agent</artifactId>
<classifier>runtime</classifier>
<version>0.7.9</version>
</dependency>
<dependency>
<groupId>org.sonarsource.java</groupId>
<artifactId>sonar-jacoco-listeners</artifactId>
<version>4.9.0.9858</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
<systemPropertyVariables>
<jacoco-agent.destfile>${project.build.directory}/coverage.exec</jacoco-agent.destfile>
</systemPropertyVariables>
</configuration>
</plugin>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.6.1</version>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>sonar-coverage</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<append>true</append>
</configuration>
<executions>
<execution>
<id>default-instrument</id>
<goals>
<goal>instrument</goal>
</goals>
</execution>
<execution>
<id>default-restore-instrumented-classes</id>
<goals>
<goal>restore-instrumented-classes</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>${project.build.directory}/coverage.exec</dataFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<modules>
<module>module1</module>
<module>module2</module>
</modules>
运行 使用命令 clean install test sonar:sonar
JaCoCo 报告
SonarQube 报告
如果您更改 maven jacoco plugin 覆盖文件的默认文件位置:
${project.build.directory}/jacoco.exec
您还需要告诉声纳插件在哪里可以找到它。
Sonar大量使用properties for the plugin,jacoco报告文件应该是:sonar.jacoco.reportPaths
一旦声纳插件查看到正确的位置,它就应该可以工作了。注意计算覆盖声纳同时使用覆盖文件和编译的 类.
附带说明:您执行 mvn clean install test sonar:sonar
这有点多余,因为测试是安装之前的一个阶段,安装也会执行相同的操作。参见 Maven Life-Cycle。但这在这里应该无关紧要。
我正在使用 Jacoco 离线检测,因为我已将 PowerMockito 用于我的测试用例。我的是 Maven 多模块项目。 我正在使用 PowerMockito 1.65 我的 SonarQube 版本是 6.7
JaCoCo 在每个模块中生成 HTML 个文件,但在 SonarQube 中它显示 0%
我的parentpom.xml
<properties>
<sonar.version>6.7</sonar.version>
<sonar-java.version>4.2</sonar-java.version>
<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
</properties>
<dependencies>
<dependency>
<groupId>org.sonarsource.sonarqube</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonar.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.sonarsource.java</groupId>
<artifactId>sonar-java-plugin</artifactId>
<version>5.0.1.12818</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.agent</artifactId>
<classifier>runtime</classifier>
<version>0.7.9</version>
</dependency>
<dependency>
<groupId>org.sonarsource.java</groupId>
<artifactId>sonar-jacoco-listeners</artifactId>
<version>4.9.0.9858</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
<systemPropertyVariables>
<jacoco-agent.destfile>${project.build.directory}/coverage.exec</jacoco-agent.destfile>
</systemPropertyVariables>
</configuration>
</plugin>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.6.1</version>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>sonar-coverage</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<append>true</append>
</configuration>
<executions>
<execution>
<id>default-instrument</id>
<goals>
<goal>instrument</goal>
</goals>
</execution>
<execution>
<id>default-restore-instrumented-classes</id>
<goals>
<goal>restore-instrumented-classes</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>${project.build.directory}/coverage.exec</dataFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<modules>
<module>module1</module>
<module>module2</module>
</modules>
运行 使用命令 clean install test sonar:sonar
JaCoCo 报告
SonarQube 报告
如果您更改 maven jacoco plugin 覆盖文件的默认文件位置:
${project.build.directory}/jacoco.exec
您还需要告诉声纳插件在哪里可以找到它。
Sonar大量使用properties for the plugin,jacoco报告文件应该是:sonar.jacoco.reportPaths
一旦声纳插件查看到正确的位置,它就应该可以工作了。注意计算覆盖声纳同时使用覆盖文件和编译的 类.
附带说明:您执行 mvn clean install test sonar:sonar
这有点多余,因为测试是安装之前的一个阶段,安装也会执行相同的操作。参见 Maven Life-Cycle。但这在这里应该无关紧要。