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

时间:2014-09-17 20:08:19

标签: maven code-coverage sonarqube jacoco jacoco-maven-plugin

我有一个与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文件?

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

2 个答案:

答案 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声纳:声纳,这就是我试过的,如果有其他最好的解决方案,请告诉我。希望这有帮助!!如果没有,请发表您的问题..