当前位置: 首页 > 知识库问答 >
问题:

忽略jacoco分析的声纳jacoco传感器

颜光临
2023-03-14

我有一个多模块maven项目,它既有模块内单元测试,也有端到端服务测试(不完全是集成测试,因为它们实际上没有与任何东西集成),我们在其中模拟被测试的特定服务的边界。后一组测试(使用mockmvc在部署之前测试所有层)生成jacoco。exec(或jacoco-it.exec,具体取决于我尝试的maven配置),它清楚地表明测试有助于代码覆盖率。事实上,绝大多数覆盖范围都在这一层(每个jacoco大约40%)。

当我在本地或通过jenkins对项目进行声纳分析时,我得到了以下顶级测试结果:

[INFO]传感器JaCoCoSensor[java]

分析 /Users/tokkov/Documents/workspace/platform/customer/assemblies/service/target/jacoco.exec

[警告]未收集覆盖范围信息。也许您忘记了将调试信息包含到编译类中?

[信息]传感器[java](完成)|时间=164ms

所以声纳找到了jacoco分析。它找到编译后的代码(将JAR解包到构建目录中,并使用sonar.java.binaries指定位置),编译后的代码确实有调试信息(使用javap-l进行验证),但它仍然举手继续。

知道为什么声纳系统忽略了Jacoco的报告吗?我是不是遗漏了什么配置?它愉快地吞噬了其他模块中的所有jacoco.exec报告,只是没有这个。

<sonar.java.binaries>${project.build.directory}/class-fix</sonar.java.binaries>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPaths>${project.build.directory}/jacoco.exec</sonar.jacoco.reportPaths>

版本:SonarqubeV7.1(Build11001),JacocoMaven插件V0.8.1

共有2个答案

吕修伟
2023-03-14

问题似乎在于嵌套maven模块。项目结构在本质上是高度嵌套的,我相信这有助于在思想上加强他们正在实施的六边形体系结构的分离。这导致了几个只包含其他模块的模块,而sonar插件似乎在代码的关联中迷失了方向。一旦我删除了任何不包含代码的模块,将文件夹结构扁平化一点,报告就完成了。

在第二个项目中,我指定使用一个jacoco。exec文件,以便jacoco可以在声纳介入之前将其聚合。这也解决了这个问题,并允许团队保留高度嵌套的maven结构。

在这两种情况下,问题似乎是sonar不处理覆盖范围目的的跨模块代码引用,除非在sonar分析之前对jacoco结果进行汇总。

这是端到端服务测试的一个重要问题,它削弱了代码隔离到离散模块中的好处。

tl;dr Sonar无法处理多层嵌套maven模块。并且完全忽略了包含测试的模块之外的代码。

王俊哲
2023-03-14

这是pom中的配置。适用于我的xml:

    <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插件设置在同一pom中。xml:

        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.1</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>
 类似资料:
  • 如何*。1 Jacoco覆盖范围内的课程是否被忽略? 我的POM中有以下内容: 但是,我收到以下错误消息: [警告]违反了com类的规则。mypackage。MyClass。1: 线路覆盖率为0.00,但预计最小值为0.85 更新日期:19年12月 以下是文件夹结构中的内容:

  • 如何使用Sonar 2.3和Maven 3.0配置JaCoCo。4. 我的项目是一个多模块Maven项目。我的顶级pom包括以下内容: 运行mvn声纳后:声纳我得到0%代码覆盖报告声纳。我应该看到至少50%。注意,我确实在每个子项目的目标文件夹中看到了jacoco.exec。

  • 我有一个基本的maven多模块,父模块是POM,其子模块是domain、service和Web。 我已经在pom父级中添加了jacoco插件和所需的配置,以便将测试覆盖率报告附加到一个Sonar很容易找到的文件中。 我的问题是,Sonar只显示第一个模块的测试覆盖范围(是domain)(即使我用编辑器打开文件,看到其他模块的类名被追加在其中)。 这种配置会有什么问题? 为了它的价值,声纳分析被称为

  • 我在构建过程中非常成功地集成了Gradle (1.11)、Sonar ( 4.1.1)、Java、Scala和Jacoco。我甚至设法获得了关于成功测试数量的信息(感谢Stackoverflow!).不过,我有一个问题。 我似乎无法获得有关每个测试的覆盖率的信息。如果能有这些信息就好了。 该项目的简化版本位于:https://github.com/sebastianharko/gradle-son

  • 我正在将 Gradle 4.4 用于 JaCoCo 0.8.0 的 Java 项目,并将声纳与声纳贾瓦 5.0.1 配合使用。 我有一个用龙目岛和注释的课程。 我在build.gradle中的JaCoCo配置如下所示: 此外,我有lombok.confi文件,其属性为< code > lombok . addlombokgeneratedannotation = true ,生成的内容实际上有<

  • 我在Jenkins创建了一个作业,对我的存储库中的所有项目执行。此作业独立于代码覆盖范围,每天运行几次。 另一方面,我希望代码覆盖发生在构建时(使用JaCoCo),并使用Ant将报告导入Sonar。 我设置了我的环境,并将JaCoCo和Sonar插件添加到Ant lib目录中。当我运行Ant目标时,我可以在本地以XML和HTML的形式看到JaCoCo的结果。 我只想把这些结果上传到一个远程Sona