SonarQube 未读取多模块项目的父 pom 目标目录中的集成 JaCoCo 测试覆盖率
SonarQube not reading Integration JaCoCo Test coverage in parent pom target directory of a multi-module project
我已按照此处的说明为我们的 Sonar 项目启用单元和集成测试:
http://docs.sonarqube.org/display/PLUG/Code+Coverage+by+Integration+Tests+for+Java+Project
我的 pom 设置与本例中给出的设置几乎相同:
https://github.com/SonarSource/sonar-examples/tree/master/projects/languages/java/code-coverage/combined%20ut-it/combined-ut-it-multimodule-maven-jacoco
父 pom 设置:
<profile>
<id>code-coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<configuration>
<append>true</append>
</configuration>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-agent-for-it</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<excludes>
<exclude>static/**/*.jar</exclude>
<exclude>static/**/*.class</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
我们有一个特定模块将 运行 集成测试:
<profile>
<id>code-coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<configuration>
<!-- The destination file for the code coverage report has to be set to the same value
in the parent pom and in each module pom. Then JaCoCo will add up information in
the same report, so that, it will give the cross-module code coverage. -->
<destFile>${project.basedir}/../target/jacoco-it.exec</destFile>
</configuration>
</plugin>
</plugins>
</build>
</profile>
我已将 Sonar 配置为寻找 UT 和 IT:
单元测试报告正常,但集成测试没有。在 Bamboo 日志中,我可以看到声纳正在寻找所有子模块中的集成测试和单元测试,但是当它到达父模块时,它永远不会 运行s JaCoCoSensor 或 JaCoCoItSensor。对于每个模块项目,这两个传感器都是 运行。我还注意到每个模块项目都有一个 JaCoCoOverallSensor 运行 而不是父项目。
如何让父项目的 JaCoCoItSensor 运行?
我添加了一些配置属性,它开始工作了。
父pom.xml添加:
<properties>
...
<sonar.jacoco.itReportPath>${project.basedir}/../target/jacoco-it.exec</sonar.jacoco.itReportPath>
<sonar.language>java</sonar.language>
</properties>
我更改的 IT 测试模块:
<destFile>${sonar.jacoco.itReportPath}/../target/jacoco-it.exec</destFile>
为此:
<destFile>${sonar.jacoco.itReportPath}</destFile>
我已按照此处的说明为我们的 Sonar 项目启用单元和集成测试: http://docs.sonarqube.org/display/PLUG/Code+Coverage+by+Integration+Tests+for+Java+Project
我的 pom 设置与本例中给出的设置几乎相同: https://github.com/SonarSource/sonar-examples/tree/master/projects/languages/java/code-coverage/combined%20ut-it/combined-ut-it-multimodule-maven-jacoco
父 pom 设置:
<profile>
<id>code-coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<configuration>
<append>true</append>
</configuration>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-agent-for-it</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<excludes>
<exclude>static/**/*.jar</exclude>
<exclude>static/**/*.class</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
我们有一个特定模块将 运行 集成测试:
<profile>
<id>code-coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<configuration>
<!-- The destination file for the code coverage report has to be set to the same value
in the parent pom and in each module pom. Then JaCoCo will add up information in
the same report, so that, it will give the cross-module code coverage. -->
<destFile>${project.basedir}/../target/jacoco-it.exec</destFile>
</configuration>
</plugin>
</plugins>
</build>
</profile>
我已将 Sonar 配置为寻找 UT 和 IT:
单元测试报告正常,但集成测试没有。在 Bamboo 日志中,我可以看到声纳正在寻找所有子模块中的集成测试和单元测试,但是当它到达父模块时,它永远不会 运行s JaCoCoSensor 或 JaCoCoItSensor。对于每个模块项目,这两个传感器都是 运行。我还注意到每个模块项目都有一个 JaCoCoOverallSensor 运行 而不是父项目。
如何让父项目的 JaCoCoItSensor 运行?
我添加了一些配置属性,它开始工作了。
父pom.xml添加:
<properties>
...
<sonar.jacoco.itReportPath>${project.basedir}/../target/jacoco-it.exec</sonar.jacoco.itReportPath>
<sonar.language>java</sonar.language>
</properties>
我更改的 IT 测试模块:
<destFile>${sonar.jacoco.itReportPath}/../target/jacoco-it.exec</destFile>
为此:
<destFile>${sonar.jacoco.itReportPath}</destFile>