在Sonarqube 6.3中使用sonar.test.exclusions

时间:2017-04-03 03:33:04

标签: sonarqube

我目前正在评估Sonarqube 6.3(从我目前的5.5实例中进行的一次重大升级),并且我很难弄清楚 sonar.test.exclusions 设置的功能。

有这个问题:Sonar Maven Plugin: How do I exclude test source directories?似乎表明它用于从分析中排除测试文件(这就是我所追求的 - 我不希望我的声纳规则集运行在我的单元测试中)。文档https://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus也表明它用于“排除单元测试文件”(也许可以扩展它以使其更清晰?)

事情是,当我添加 sonar.test.exclusions ,其值为** / src / test / **然后运行我的分析时,我仍然会得到代码味道等等被发现:

  • 富/ SRC /测试/ JAVA /富/酒吧/ BarTest.java
  • 富/ SRC /测试/ JAVA / LAH / LahTest.java

当我使用 sonar.exclusions 时,它们不会显示。为什么 sonar.test.exclusions 没有达到我的预期?

2 个答案:

答案 0 :(得分:7)

首先:如果您有Maven项目,则应使用扫描程序进行Maven(mvn sonar:sonar)。它将简化您的配置,并自动将src / test / java文件夹注册为测试目录。

现在,如果你想手动完成配置,或者了解幕后发生了什么,这里有一个解释:SonarQube扫描仪使用2组文件,主要和测试。使用属性sonar.sources配置主源文件。使用sonar.tests配置测试源文件。

最重要的是,您可以使用声纳。[test。]排除属性过滤一些内容。

在您的情况下,您的问题是Foo/src/test/java/foo/bar/BarTest.java似乎被视为主要源文件。这就是sonar.test.exclusions没有效果的原因。

答案 1 :(得分:0)

使用具有验证目标的Maven( mvn clean verify sonar:sonar install ),我使用此配置没有问题:

...
<properties>
    ....
    <sonar.exclusions>
        **/generated/**/*,
        **/model/**/*
    </sonar.exclusions>
    <sonar.test.exclusions>
        src/test/**/*
    </sonar.test.exclusions>
    ....
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
    <sonar.coverage.exclusions>
        **/generated/**/*,
        **/model/**/*
    </sonar.coverage.exclusions>
    <jacoco.version>0.7.5.201505241946</jacoco.version>
    ....
</properties>
....

覆盖排除配置,内部属性(向上)和jacoco插件配置:

.....
<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${jacoco.version}</version>
            <executions>
                <execution>
                    <id>prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
                <execution>
                    <id>post-unit-test</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                    <configuration>
                        <dataFile>target/jacoco.exec</dataFile>
                        <outputDirectory>target/jacoco-ut</outputDirectory>
                    </configuration>
                </execution>
            </executions>
            <configuration>
                <systemPropertyVariables>
                    <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
                </systemPropertyVariables>
            </configuration>
        </plugin>
    </plugins>
</build>
....