【问题标题】:How can I exclude files of the Code Coverage of SonarQube using JaCoCo maven plugin如何使用 JaCoCo maven 插件排除 SonarQube 的代码覆盖率文件
【发布时间】:2017-06-03 03:02:45
【问题描述】:

我在集成 JaCoCo maven 插件以覆盖 SonarQube 6.0 的代码时遇到了一个大问题。

我有一个多模块 Maven 项目,可以说:

master
    |--core
    |--web
    |--process

在主 pom.xml 中,我设置了这样的报告配置文件:

<profile>
        <id>reporting</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>pre-unit-test</id>
                            <!--<phase>test</phase> -->
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                            <configuration>
                                <!-- Sets the path to the file to write the execution data to. -->
                                <destFile>${sonar.jacoco.reportPath}</destFile>
                                <!-- Connection with SureFire plugin -->
                                <propertyName>sonarUnitTestArgLine</propertyName>
                            </configuration>
                        </execution>
                        <execution>
                            <id>post-unit-test</id>
                            <phase>test</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                            <configuration>
                                <!-- Sets the path to where the execution data is located. -->
                                <dataFile>${sonar.jacoco.reportPath}</dataFile>
                                <!-- Sets the output directory for the code coverage report. -->
                                <outputDirectory>${jacoco.ut.outputdir}</outputDirectory>
                            </configuration>
                        </execution>

                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <forkMode>once</forkMode>
                        <argLine>${sonarUnitTestArgLine} -XX:MaxPermSize=512M -Xms512m -Xmx512m</argLine>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

在孩子们中,我通过添加一些排除项来重载配置:

<!-- First attempt -->
<properties>
    <sonar.jacoco.excludes>**/model/**/*</sonar.jacoco.excludes>
</properties>

<!-- Second attempt -->
<properties>
    <sonar.coverage.exclusions>**/model/**/*</sonar.coverage.exclusions>
</properties>

<!-- Third attempt -->
<profiles>
    <profile>
        <id>reporting</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <configuration>
                        <excludes>
                            <!-- Exclude model classes (POJO's) -->
                            <exclude>**/model/**/*.class</exclude>
                        </excludes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

这里的想法是去除代码覆盖率的Pojo(我们也为其他类型的Class这样做......)

当我运行 mvn 命令行时:

mvn clean generate-sources install verify -P reporting -fn

我的所有报告都生成良好,但在 Sonar 中,没有考虑到排除项...

请你帮我解决这个问题?

【问题讨论】:

    标签: java maven sonarqube jacoco-maven-plugin


    【解决方案1】:

    经过大量研究,我找到了解决此问题的方法,我发布答案以帮助人们解决同样的问题:

    在主模块中

    <properties>
        <sonar.coverage.exclusions>
           **/patternA/**/*,
           **/patternB/**/*
        </sonar.coverage.exclusions>
    </properties>
    

    在子模块中

    <profiles>
        <profile>
            <id>report</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                        <configuration>
                            <excludes>
                                <!-- Exclude model classes (POJO's) -->
                                <exclude>**/patternA/**/*.class</exclude>
                            </excludes>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
    

    在主 pom 中

    【讨论】:

    • 我不明白。为什么需要做两次?
    • II 只能将它放在 Master Pom 上一次,但我认为答案不是很可靠。但这仍然是避免问题的一种方法...
    • @k0ner 一个将其排除在 jacoco 的检测之外,另一个将其从声纳报告中隐藏。
    【解决方案2】:

    我尝试在属性部分添加以下详细信息,它对我有用。

    <sonar.coverage.exclusions>
         **/patternA/*.java,
         **/patternB/*.java
    </sonar.coverage.exclusions>
    

    【讨论】:

      猜你喜欢
      • 2020-06-18
      • 2018-11-13
      • 2016-12-11
      • 2018-04-07
      • 2020-07-18
      • 1970-01-01
      • 2016-02-12
      • 2019-04-10
      • 2021-08-29
      相关资源
      最近更新 更多