如何使声纳忽略一些类的 codeCoverage 度量?

我在 Maven 有个声纳侧写。除了代码覆盖度量之外,一切都工作正常。我想让声纳只为代码覆盖度量而忽略一些类。我有以下资料:

<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>

拜托帮帮忙,我试图加上

<exclude>com/qwerty/dw/publisher/Main.class</exclude>

但没用

更新

我有一个正确的 Cobertura 侧写。我试图把它添加到声纳配置文件,但我仍然有53% ,而不是约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>
247040 次浏览

我认为您正在寻找这个答案中描述的解决方案 < a href = “ https://stackoverflow.com/questions/951569/ Cobertura 排除代码覆盖的方法 请记住,如果您使用 Sonar 3.2,您必须指定您的覆盖工具是 cobertura 而不是 jacoco (默认) ,它还不支持这种特性

有时,Clover 被配置为为所有非测试代码提供代码覆盖率报告。如果希望覆盖这些首选项,可以使用配置元素排除并包含源文件,以避免对其进行检测:

<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>maven-clover2-plugin</artifactId>
<version>${clover-version}</version>
<configuration>
<excludes>
<exclude>**/*Dull.java</exclude>
</excludes>
</configuration>
</plugin>

此外,还可以包括以下声纳配置:

<properties>
<sonar.exclusions>
**/domain/*.java,
**/transfer/*.java
</sonar.exclusions>
</properties>

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

<properties>
<sonar.exclusions>**/Name*.java</sonar.exclusions>
</properties>

根据: http://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus#NarrowingtheFocus-Patterns

看起来你可以用“ . java”或者“ *”来结束它

来获得你感兴趣的 Java 类。

对于 jacoco: 使用以下属性:

-Dsonar.jacoco.excludes=**/*View.java

在写这篇文章的时候(SonarQube 4.5.1) ,要设置的正确属性是 sonar.coverage.exclusions,例如:

<properties>
<sonar.coverage.exclusions>foo/**/*,**/bar/*</sonar.coverage.exclusions>
</properties>

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

为了找到您版本的 SonarQube 的属性名,您可以尝试转到 SonarQube 实例的 一般设定部分并查找 代码覆盖项(在 SonarQube 4.5.x 中,即 一般设置 & rarr; 排除 & rarr; 代码覆盖)。在输入字段的下面,它给出了上面提到的属性名(“ Key: sonar.Coverage.exclustions”)。

当使用声纳扫描仪快速,使用声纳覆盖。排除在您的声纳项目。属性仅为代码覆盖率排除任何文件。如果您也想从分析中排除文件,那么可以使用 sonar. 排除。这对我来说很快就奏效了

sonar.coverage.exclusions=**/*ViewController.swift,**/*Cell.swift,**/*View.swift

根据 这个文档,SonarQube 7.1

排除 -以逗号分隔的文件路径模式列表 被排除在分析之外 声纳,覆盖范围,排除项 -逗号分隔 从 覆盖范围中排除的文件路径模式列表 计算

这个 文件给出了一些关于如何创建路径模式的示例

# 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

如果在项目中使用 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

我不得不挣扎了一会儿,但我找到了一个解决办法,我补充道

-Dsonar.coverage.exclusions=**/*.*

覆盖度量在仪表板上被取消了,所以我意识到问题在于我传递的路径,而不是属性。在我的例子中,排除的路径是 java/org/acme/Exception,因此我使用:

`-Dsonar.coverage.exclusions=**/exceptions/**/*.*`

它工作,但因为我没有子文件夹,它也工作

-Dsonar.coverage.exclusions=**/exceptions/*.*

通过更新 pom.xml 中的 jacoco-maven-plugin 配置,我能够实现必要的代码覆盖排除

<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.6</version>
<executions>
<execution>
<id>pre-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<propertyName>jacocoArgLine</propertyName>
<destFile>${project.test.result.directory}/jacoco/jacoco.exec</destFile>
</configuration>
</execution>
<execution>
<id>post-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>${project.test.result.directory}/jacoco/jacoco.exec</dataFile>
<outputDirectory>${project.test.result.directory}/jacoco</outputDirectory>
</configuration>
</execution>
</executions>
<configuration>
<excludes>
<exclude>**/GlobalExceptionHandler*.*</exclude>
<exclude>**/ErrorResponse*.*</exclude>
</excludes>
</configuration>
</plugin>

这个配置在 jacoco 覆盖率中排除了 GlobalExceptionHandler.java 和 ErrorResponse.java。

接下来的两条线对声纳覆盖也有同样的效果。

    <sonar.exclusions> **/*GlobalExceptionHandler*.*, **/*ErrorResponse*.</sonar.exclusions>
<sonar.coverage.exclusions> **/*GlobalExceptionHandler*.*, **/*ErrorResponse*.* </sonar.coverage.exclusions>


如果你正在寻找排除和使用。

在 build.gradle 文件中添加以下行:

sonarqube {
properties {
property "sonar.exclusions", "'**/example/your/service/impl/**',"
} }

注意 内部单引号。祝你好运。