我们正在使用maven进行声纳分析,除了jacoco的代码覆盖率结果外,它运行良好。我们有一个使用tycho-surefire-plugin进行测试的eclipse项目。我没有覆盖argLines属性,因此涉及该行的解决方案可能不合适。
事实:
主要问题是以下属性
如client.admin.test.fragment中的Testing结构所示,测试包含在/ src文件夹中,源也位于/ src文件夹中的项目client.admin中。 当我们运行分析时,我们得到以下错误:
[警告]未收集覆盖范围信息。也许你忘了包括 将信息调试到编译的类中?
我认为这与属性sonar.java.binaries有关,它寻找片段项目(client.admin.project)的目标/类中的源,这些源实际上位于宿主项目(客户端)中。管理员)。在片段项目中,我们配置了sonar.tests和sonar.sources属性,以便它们调用相应项目的/ src文件夹。
在声纳Analysis Parameters页面中,只有sonar.sources是maven有效属性,sonar.tests和sonar.java.binaries显然不能在maven中配置。那怎么可以将二进制文件附加到项目中。我尝试从主机项目中复制文件夹目标/类,但我得到了相同的消息。 maven 中有解决方法吗?
可以在父文件夹中找到为整个项目生成的一个jacoco.exec文件。这已完成配置 jacoco.destFile 和 sonar.jacoco.reportPath 属性
主要广告中的Jacoco插件:
<!-- Jacoco Plugin -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
</configuration>
</execution>
<execution>
<id>default-report</id>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>${sonar.jacoco.reportPath}</dataFile>
<outputDirectory>${jacoco.reports.outputDirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Maven插件版本:
属性
<sonar.language>java</sonar.language>
<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
<sonar.junit.reportsPath>${project.build.directory}/surefire-reports/</sonar.junit.reportsPath>
<sonar.jacoco.reportPath>${basedir}/../../../main/**.master/target/jacoco.exec</sonar.jacoco.reportPath>
<jacoco.reports.outputDirectory>${basedir}/../../../main/**.master/target/site/jacoco</jacoco.reports.outputDirectory>
<sonar.sources>src</sonar.sources>
在测试项目(eclipse-test-plugin)中,我们更改了添加属性 sonar.sources ,以便从我们正在测试的项目的src文件夹中查找源代码,例如在client.admin.test.fragment中,我们从client.admin中搜索 src
以下属性在代码中被注释,因为根据文档和调试输出,它们在maven中不受支持。
<!--<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>-->
<!--<sonar.tests></sonar.tests>-->
<!--<sonar.java.binaries></sonar.java.binaries>-->
答案 0 :(得分:1)
首先,您必须告诉JaCoCo代理将所有覆盖数据报告到一个公共文件中。其次,您告诉Sonar JaCoCo插件从聚合文件中读取覆盖率数据。
为此,请设置属性&#34; jacoco.destFile &#34;和&#34; sonar.jacoco.reportPath &#34;在您的父pom.xml中使用相同的绝对路径,例如:
<properties>
<jacoco.destFile>/home/jenkins/jobs/my.project/workspace/parent/target/jacoco.exec</jacoco.destFile>
<sonar.jacoco.reportPath>/home/jenkins/jobs/my.project/workspace/parent/target/jacoco.exec</sonar.jacoco.reportPath>
</properties>
请注意,这些属性将继承到所有子poms,因此您无法使用$ {project.build.directory}之类的Maven表达式,因为这将评估每个pom的不同目录。
您可以创建一个小帮助器Mojo,它可以自动解析当前构建计算机上的绝对路径,然后将属性注入Maven模型。