如何使Sonar忽略codeCoverage指标的一些类?

Dmi*_*voi 37 java maven sonarqube

我在Maven有一个声纳配置文件.除代码覆盖率指标外,一切正常.我想让Sonar只为代码覆盖率指标忽略一些类.我有以下个人资料:

<profile>
    <id>sonar</id>
    <properties>
        <sonar.exclusions>**/beans/jaxb/**</sonar.exclusions>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.plugin.version}</version>
                <configuration>
                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
                    <excludes>
                        <exclude>**/*Suite*.java</exclude>
                        <exclude>**/*RemoteTest.java</exclude>
                        <exclude>**/*SpringTest.java</exclude>
                        <exclude>**/*CamelTest.java</exclude>
                        <exclude>**/*FunctionalTest.java</exclude>
                        <exclude>**/*IntegrationTest.java</exclude>
                        <exclude>**/*DaoBeanTest.java</exclude>
                    </excludes>
                </configuration>
            </plugin>                    
        </plugins>
    </build>
</profile>
Run Code Online (Sandbox Code Playgroud)

请帮忙.我试着添加类似的东西

<exclude>com/qwerty/dw/publisher/Main.class</exclude>
Run Code Online (Sandbox Code Playgroud)

但它没有帮助

UPDATE

我有一个正确的Cobertura配置文件.我试图将它添加到Sonar配置文件中,但我仍然有53%而不是Cobertura配置文件中的95%

<profile>
    <id>sonar</id>
    <properties>
        <sonar.exclusions>**/beans/jaxb/**</sonar.exclusions>
        <sonar.core.codeCoveragePlugin>cobertura</sonar.core.codeCoveragePlugin>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.plugin.version}</version>
                <configuration>
                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
                    <excludes>
                        <exclude>**/*Suite*.java</exclude>
                        <exclude>**/*RemoteTest.java</exclude>
                        <exclude>**/*SpringTest.java</exclude>
                        <exclude>**/*CamelTest.java</exclude>
                        <exclude>**/*FunctionalTest.java</exclude>
                        <exclude>**/*IntegrationTest.java</exclude>
                        <exclude>**/*DaoBeanTest.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>${cobertura.maven.plugin.version}</version>
                <configuration>
                    <instrumentation>
                        <excludes>
                            <exclude>com/qwerty/dw/dao/*</exclude>
                            <exclude>com/qwerty/dw/domain/*</exclude>
                            <exclude>com/qwerty/dw/beans/**/*</exclude>
                            <exclude>com/qwerty/dw/daemon/exception/*</exclude>
                            <exclude>com/qwerty/dw/daemon/Main.class</exclude>
                            <exclude>com/qwerty/dw/sink/Main.class</exclude>
                            <exclude>com/qwerty/dw/publisher/Main.class</exclude>
                            <exclude>com/qwerty/dw/publisher/dao/*</exclude>
                            <exclude>com/qwerty/dw/publisher/domain/*</exclude>
                        </excludes>
                    </instrumentation>
                    <formats>
                        <format>html</format>
                    </formats>
                    <aggregate>true</aggregate>
                    <check>
                        <haltOnFailure>true</haltOnFailure>
                        <branchRate>60</branchRate>
                        <lineRate>60</lineRate>
                        <totalBranchRate>60</totalBranchRate>
                        <totalLineRate>60</totalLineRate>
                    </check>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>clean</goal>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>
Run Code Online (Sandbox Code Playgroud)

bar*_*uin 64

在撰写本文时(使用SonarQube 4.5.1),要设置的正确属性是sonar.coverage.exclusions,例如:

<properties>
    <sonar.coverage.exclusions>foo/**/*,**/bar/*</sonar.coverage.exclusions>
</properties>
Run Code Online (Sandbox Code Playgroud)

这似乎是之前几个版本的变化.请注意,这仅从覆盖率计算中排除给定的类.计算所有其他指标和问题.

为了找到您的SonarQube版本的属性名称,您可以尝试转到SonarQube实例的" 常规设置"部分,并查找" 代码覆盖率"项目(在SonarQube 4.5.x中,即" 常规设置"→"排除"→"代码覆盖率").在输入字段下方,它给出了上面提到的属性名称("Key:sonar.coverage.exclusions").

  • @Andrew Roth我添加的注释现在已经2岁了,那时Sonar发生了很多变化:)现在要使用的参数是sonar.exclusions。新文档的参考:https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/ (3认同)
  • @MichaelTecourt - 它在这里 [SonarQube 分析排除和包含](https://docs.sonarqube.org/display/SONAR/Analysis+Parameters#AnalysisParameters-Exclusions/Inclusions) **从文档中提取:** sonar.coverage。排除 - 要从覆盖率计算中排除的文件路径模式的逗号分隔列表 (2认同)
  • 完全忽略 foo 包的正确语法是:`**/foo/**/*` (2认同)
  • 不,那是不正确的。`sonar.exclusions` 将从分析中排除提到的文件或目录。`sonar.coverage.exclusions` 仍然存在,并将从代码覆盖范围中排除提到的文件或目录,就像所问的问题一样。但当前文档中并未提及。我使用的是 SonarQube 8.1,我可以在“管理 &gt; 分析范围”下看到配置键“sonar.coverage.exclusions” (2认同)

rog*_*ack 24

对我们来说,这工作(基本上是pom.xml级别属性):

      <properties>
            <sonar.exclusions>**/Name*.java</sonar.exclusions>
      </properties>
Run Code Online (Sandbox Code Playgroud)

根据http://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus#NarrowingtheFocus-Patterns看来你可以用".java"结束它,也可以用"*"结束它来获取java类.有兴趣.

  • 我也在考虑这个问题,但这不包括每个指标(文档化的API,规则合规性......)中的文件,而不仅仅是测试覆盖率. (4认同)
  • 那可能就是您想要的,但是问题是关于覆盖率的明确问题:“我想让Sonar忽略某些类(仅**)作为代码覆盖率指标” (2认同)

小智 7

当使用 sonar-scanner 进行 swift 时,请在 sonar-project.properties 中使用 sonar.coverage.exclusions 来排除任何仅用于代码覆盖的文件。如果您还想从分析中排除文件,您可以使用 sonar.exclusions。这很快对我有用

sonar.coverage.exclusions=**/*ViewController.swift,**/*Cell.swift,**/*View.swift
Run Code Online (Sandbox Code Playgroud)


met*_*ron 6

根据SonarQube 7.1 的文档

sonar.exclusions - 要从分析中排除的文件路径模式的 逗号分隔列表sonar.coverage.exclusions - 要从覆盖率 计算中排除的文件路径模式的逗号分隔列表

文档提供了一些有关如何创建路径模式的示例

# Exclude all classes ending by "Bean"
# Matches org/sonar.api/MyBean.java, org/sonar/util/MyOtherBean.java, org/sonar/util/MyDTO.java, etc.
sonar.exclusions=**/*Bean.java,**/*DTO.java

# Exclude all classes in the "src/main/java/org/sonar" directory
# Matches src/main/java/org/sonar/MyClass.java, src/main/java/org/sonar/MyOtherClass.java
# But does not match src/main/java/org/sonar/util/MyClassUtil.java
sonar.exclusions=src/main/java/org/sonar/*

# Exclude all COBOL programs in the "bank" directory and its sub-directories
# Matches bank/ZTR00021.cbl, bank/data/CBR00354.cbl, bank/data/REM012345.cob
sonar.exclusions=bank/**/*

# Exclude all COBOL programs in the "bank" directory and its sub-directories whose extension is .cbl
# Matches bank/ZTR00021.cbl, bank/data/CBR00354.cbl
sonar.exclusions=bank/**/*.cbl
Run Code Online (Sandbox Code Playgroud)

如果您在项目中使用 Maven,则可以像这样传递 Maven 命令行参数,例如 -Dsonar.coverage.exclusions=**/config/*,**/model/*

我在明确排除单个类时遇到问题。在我的观察之下:

**/*GlobalExceptionhandler.java - not working for some reason, I was expecting such syntax should work
com/some/package/name/GlobalExceptionhandler.java - not working
src/main/java/com/some/package/name/GlobalExceptionhandler.java - good, class excluded explicitly without using wildcards
Run Code Online (Sandbox Code Playgroud)


小智 5

对于jacoco:使用此属性:

-Dsonar.jacoco.excludes=**/*View.java
Run Code Online (Sandbox Code Playgroud)

  • 不再支持`sonar.jacoco.excludes`(从SonarQube 4.5.1开始).有关"新"配置,请参见[此处](http://stackoverflow.com/a/27133765/1005481). (3认同)

ppa*_*rou 2

我认为您正在寻找此答案中描述的解决方案Excludemethods from codecover with Cobertura 请记住,如果您使用的是Sonar 3.2,您已指定您的覆盖工具是cobertura而不是jacoco(默认),这不会'还不支持这种功能