声纳上的多模块 Maven 项目代码覆盖问题

use*_*601 5 code-coverage maven jacoco sonarqube jacoco-maven-plugin

我有一个与 JaCoCo 和 SONAR 的多模块 maven 项目相关的问题。

我有一个父模块和 3 个子模块。

父 |-child1 - pom.xml |-child2 - pom.xml |-child3 - pom.xml |-pom.xml

我在父 pom.xml 中包含了 JaCoCo 插件。当我从父 pom.xml 运行 mvn clean install sonar:sonar build 时,我看到每个孩子都生成了自己的 jacoco.exec 文件。像这样的 child1/target/jacoco.exec, child2/target/jacoco.exec 等。但是,在父级别中没有生成 jacoco.exec 。

当我运行声纳分析时,我看到单元测试覆盖率在声纳仪表板上显示为 0.0%。

我的问题是
1. 我应该怎么做才能看到整个项目的单元测试覆盖率?
2. 为了显示一个单元测试覆盖率,SONAR 是从父级别还是从子级别选择 jacoco.exec 文件?

请帮忙。这对我来说真的是一个障碍。感谢您的所有投入。

Sha*_*kar 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 -->
Run Code Online (Sandbox Code Playgroud)

插件:

<!-- 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 -->
Run Code Online (Sandbox Code Playgroud)

并在 Jenkins 中将“目标和选项”配置为:

sonar:sonar
Run Code Online (Sandbox Code Playgroud)

对于运行特定测试:

sonar:sonar -DfailIfNoTests=false -Dtest=<Test Class> test
Run Code Online (Sandbox Code Playgroud)