我有一个与JaCoCo和SONAR的多模块maven项目有关的问题。
我有一个父母和3个子模块。
parent | -child1 - pom.xml | -child2 - pom.xml | -child3 - pom.xml | -pom.xml
我在父pom.xml中包含了JaCoCo插件。当我从父pom.xml运行mvn clean install声纳:声纳构建时,我看到每个子节点都生成自己的jacoco.exec文件。像这样的child1 / target / jacoco.exec,child2 / target / jacoco.exec等。但是,父级别中没有生成jacoco.exec。
当我进行声纳分析时,我发现声纳仪表板上的单位测试覆盖率显示为0.0%。
我的问题是
1.我该怎么做才能看到整个项目的单元测试覆盖率?
2.要显示一个单元测试覆盖率,SONAR是从父级别还是从子级别选择jacoco.exec文件?
请帮忙。这对我来说真的是一个封锁者。感谢您的所有投入。
答案 0 :(得分:1)
我遇到了同样的问题,然后我在每个模块pom xml中包含以下内容并且它有效:
<!-- Sonar START -->
<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>
<jacoco.version>0.7.9</jacoco.version>
<!-- Sonar START -->
插件:
<!-- SONAR config START -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
</configuration>
<executions>
<execution>
<id>agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<tasks>
<echo>Project Base Path (WEB):: ${project.basedir}</echo>
<echo>Jacoco exec target path (WEB):: ${sonar.jacoco.reportPath}</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.2</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.7</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<argLine>${argLine}</argLine>
</configuration>
</plugin>
<!-- SONAR config END -->
在Jenkins中配置&#34;目标和选项&#34;为:
sonar:sonar
运行特定测试:
sonar:sonar -DfailIfNoTests=false -Dtest=<Test Class> test
答案 1 :(得分:0)
我有类似的问题,0.0%覆盖范围&amp;使用SonarQube 6.7.2的Sonar仪表板上没有任何单元测试: Maven:3.5.2, Java:1.8, Jacoco:使用7.0 / 7.9 / 8.0, 操作系统:Windows
经过很多努力寻找正确的解决方案,解决了这个配置的问题,我的父pom看起来像:
<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>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.4.0.905</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</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>
</plugins>
</pluginManagement>
</build>
我尝试过其他一些选项,例如 jacoco-aggregate &amp;甚至创建一个子模块,通过将其包含在父pom中,但没有真正起作用的&amp;这很简单。我在日志中看到<sonar.jacoco.reportPath>
已被弃用,但仍然按原样运行,似乎在执行时自动替换,或者可以手动更新为<sonar.jacoco.reportPaths>
或最新。在使用 mvn clean install 开始在cmd中进行设置之后,然后 mvn org.jacoco:jacoco-maven-plugin:prepare-agent install &amp;然后做 mvn声纳:声纳,这就是我试过的,如果有其他最好的解决方案,请告诉我。希望这有帮助!!如果没有,请发表您的问题..