我有一个带有父pom.xml的多模块项目,里面有两个模块。 Project.jar和Project.war。所有测试用例都在Project.jar下。当我在父pom上运行mvn sonar.sonar目标时,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。
答案 0 :(得分:2)
使用java插件的2.4版本,您必须在运行SonarQube分析之前生成覆盖率报告。您可以在http://docs.codehaus.org/display/SONAR/JaCoCo+Plugin页面上看到如何执行此操作。
答案 1 :(得分:0)
对于那些有类似问题的人,我解决了这个问题的方式略有不同(我从命令行运行它而没有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插件进行任何更改(因为我过去必须这样做)。