java 如何使用 JaCoCo maven 插件排除 SonarQube 的代码覆盖率文件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 
原文地址: http://stackoverflow.com/questions/41724423/
Warning: these are provided under cc-by-sa 4.0 license.  You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can I exclude files of the Code Coverage of SonarQube using JaCoCo maven plugin
提问by Gilles Bodart
I've got a big issue with the integration of JaCoCo maven plugin for the code covering of SonarQube 6.0.
我在为 SonarQube 6.0 的代码覆盖集成 JaCoCo maven 插件时遇到了一个大问题。
I've got a multi-module Maven project lets say :
我有一个多模块 Maven 项目可以说:
master
    |--core
    |--web
    |--process
in the master pom.xml, I've setted a reporting profile like that :
在主 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>
in the childs, I overload the configuration by adding some exclusions :
在孩子中,我通过添加一些排除项来重载配置:
<!-- 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>
the idea here is to remove the Pojo of the code coverage ( we also do it for other types of Class ...)
这里的想法是删除代码覆盖率的 Pojo(我们也为其他类型的类这样做......)
When I run the mvn command line :
当我运行 mvn 命令行时:
mvn clean generate-sources install verify -P reporting -fn
All my reports are well generated but in Sonar, the exculsions aren't been taking into account ...
我所有的报告都很好地生成,但在声纳中,没有考虑到排除......
Please can you help me fixing this issue ?
请你能帮我解决这个问题吗?
回答by Gilles Bodart
After a lot of reasearch, I've found the solution for this problem, I post the answers to help poeple ho'll have the same issue :
经过大量研究,我找到了这个问题的解决方案,我发布了答案以帮助人们解决同样的问题:
In the master-module
在主模块中
<properties>
    <sonar.coverage.exclusions>
       **/patternA/**/*,
       **/patternB/**/*
    </sonar.coverage.exclusions>
</properties>
In the sub-modules
在子模块中
<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>
in the master pom
在主 pom
回答by Himadri
I tried adding just the below details in properties section and it worked for me.
我尝试在属性部分只添加以下详细信息,它对我有用。
<sonar.coverage.exclusions>
     **/patternA/*.java,
     **/patternB/*.java
</sonar.coverage.exclusions>

