我有一个多模块项目,有一个父pom.xml,里面有两个模块。Project.jar和Project.war。所有的测试用例都在Project.jar下。当我在父 pom 上运行 mvn sonar.sonar goal 时,jacoco.exec 没有生成,代码覆盖率为空白。我在父 pom 中有以下属性。
<properties>
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPath>${project.basedir}/target/jacoco.exec</sonar.jacoco.reportPath>
</properties>
请帮助我。我使用的是Sonarqube 4.2。
在2.4版本的java插件中,你必须在运行SonarQube分析之前生成覆盖率报告。你可以看到这个页面 https:/github.comSonarSourcesonar-jacoco。 关于如何做到这一点。
对于那些有类似问题的人,我解决这个问题的方式略有不同(我从命令行运行,而不是让Jenkins来做)。 我在插件方面没有问题。
所有这些设置都在父POM中定义。 我使用的是下面的版本。
<plugin.jacoco.version>0.7.2.201409121644</plugin.jacoco.version>
报告路径略有不同,这使得只有一个jacoco.exec被创建。 默认情况下,如果文件已经存在,Sonar会将结果追加在一起。
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
在pluginManagement部分,我有以下插件。
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${plugin.jacoco.version}</version>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
</configuration>
<executions>
<execution>
<id>agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
然后在我的插件部分,我确保这个插件在整个项目中都可用。
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
正如benzonico所指出的,你需要在声纳分析之前运行测试,我的做法如下。
mvn clean test sonar:sonar
我没有对Surefire插件做任何修改(因为我过去必须这样做)。