3 回答
TA贡献1799条经验 获得超8个赞
我和您处在同一情况下,分散在整个互联网上的一半答案很烦人,因为似乎很多人都遇到了同样的问题,但是没有人会费心去解释他们是如何解决的。
该声纳的文档是指 一个GitHub的项目,例子是有帮助的。我要解决的问题是将集成测试逻辑应用于常规单元测试(尽管正确的单元测试应特定于子模块,但并非总是如此)。
在父pom.xml中,添加以下属性:
<properties>
<!-- Sonar -->
<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>
</properties>
这将使Sonar拾取同一位置(父项目中的目标文件夹)中所有子模块的单元测试报告。它还告诉Sonar重用手动运行的报告,而不是滚动自己的报告。我们只需将jacoco-maven-plugin放置在build / plugins内的父pom中,即可为所有子模块运行:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.0.201210061924</version>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
</configuration>
<executions>
<execution>
<id>agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
destFile将报告文件放置在Sonar会查找的位置,并将append其添加到文件中,而不是覆盖它。这会将所有JaCoCo报告合并到同一文件中的所有子模块。
Sonar将为每个子模块查看该文件,因为这就是我们在上面指出的内容,因此我们可以为Sonar中的多模块文件提供组合的单元测试结果。
TA贡献1963条经验 获得超6个赞
自0.7.7版以来的新方法
从0.7.7版开始,有一种新方法可以创建汇总报告:
您创建一个单独的“报告”项目,该项目将收集所有必要的报告(聚合器项目中的任何目标均在其模块之前执行,因此无法使用)。
aggregator pom
|- parent pom
|- module a
|- module b
|- report module
该根POM看起来是这样的(不要忘了在模块添加新的报表模块):
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.8</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
每个子模块的poms根本不需要更改。报表模块中的pom 如下所示:
<!-- Add all sub modules as dependencies here -->
<dependencies>
<dependency>
<module a>
</dependency>
<dependency>
<module b>
</dependency>
...
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.8</version>
<executions>
<execution>
<id>report-aggregate</id>
<phase>verify</phase>
<goals>
<goal>report-aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
完整的示例可以在这里找到。
添加回答
举报