配置 Sonar 以从 Maven pom.xml 中排除文件

Posted

技术标签:

【中文标题】配置 Sonar 以从 Maven pom.xml 中排除文件【英文标题】:Configure Sonar to exclude files from Maven pom.xml 【发布时间】:2014-02-20 21:32:49 【问题描述】:

我在maven中配置了一个项目,代码分析由SonarQube完成。

我正在尝试在 pom.xml 文件中配置 SonarQube,以从代码分析中排除一些文件。这些文件可以通过它们的类名来识别,它们在扩展名之前包含下划线字符(它们是元模型类)。下面我给出了我尝试排除它们的 pom.xml 文件的一部分:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <sonar.sources>src/main/java</sonar.sources>
        <sonar.exclusions>file:**/src/main/java/**/*_.*</sonar.exclusions>
    </configuration>
</plugin>

但是,上面的代码不起作用。有没有办法从我的 pom.xml 文件中配置 SonarQube 以在分析源代码时忽略这些文件?

提前谢谢你。

【问题讨论】:

SonarQube 配置参数被视为“系统属性”,如果我没记错的话。您是否尝试在 pom.xml 中将它们设置为全局 【参考方案1】:

共有三种方法。

    您可以将这些文件添加到您的 pom.xml 中的属性中:这是为了排除代码重复:
<properties>
    <sonar.cpd.exclusions>
        **/dto/**/*,
        **/entity/**/*
    </sonar.cpd.exclusions>
</properties>
    使用 pom.xml 我们还可以使用分析属性在 pom.xml 文件中定义排除规则。
<properties>
<sonar.issue.ignore.multicriteria>e1</sonar.issue.ignore.multicriteria>
    <sonar.issue.ignore.multicriteria.e1.ruleKey>
        java:S4784
    </sonar.issue.ignore.multicriteria.e1.ruleKey>
    <sonar.issue.ignore.multicriteria.e1.resourceKey>
        **/commons/**/*
    </sonar.issue.ignore.multicriteria.e1.resourceKey>
</properties>
    使用 sonar-project.properties 我们也可以在sonar-project.properties file中定义排除规则使用分析 properties.Let 定义 sonar-project.properties file 并将其添加到我们的资源目录:
sonar.issue.ignore.multicriteria=e1
sonar.issue.ignore.multicriteria.e1.ruleKey=java:S106
sonar.issue.ignore.multicriteria.e1.resourceKey=**/SonarExclude.java

how we can see the rule Key from sonarqube

【讨论】:

【参考方案2】:

我们必须在 maven settings.xml 文件中添加以下代码

       <profile>
                <id>sonar</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>     
           <properties>
               <sonar.host.url>http://localhost:9000</sonar.host.url>

               <sonar.exclusions>
               # exclude more class under same package
                  src/main/java/co/domain/*,
                  src/main/java/co/util/JsonMapper.java

               # exclude individual class
                  src/main/java/co/util/ProviderCallBuilder.java
               </sonar.exclusions>
            </properties>
       </profile>

【讨论】:

嗨深,欢迎。请考虑添加更多信息。【参考方案3】:

我正在使用声纳分析 PHP 代码库。 &lt;sonar.exclusions&gt;&lt;sonar.coverage.exclusions&gt; 都没有成功。 我的解决方案是 - 我没有指定排除项,而是指定了包含目录,如下所示:

<properties>
  .........
  <sonar.exclusions>./app/models,./app/controllers</sonar.exclusions>
  .........
</properties>

【讨论】:

【参考方案4】:

在按照接受的答案进行声纳排除时,请确保遵循SonarQube documentation 中的这种模式方法:

相对路径基于组件的完全限定名称(如下所示):

src/main/java/org/sonar/batch/phases/AbstractPhaseEvent.java

示例

# Exclude all classes ending with "Bean"
# Matches org/sonar.api/MyBean.java, org/sonar/util/MyOtherBean.java, etc.
**/*Bean.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
src/main/java/org/sonar/*

# Exclude all files in the "bank" directory and its sub-directories
# Matches bank/ZTR00021.cbl, bank/data/CBR00354.cbl, bank/data/REM012345.cob
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
bank/**/*.cbl

因此,如果您想排除所有以“Bean”结尾的类和“src/main/java/org/sonar”目录中的所有类(但不在其子目录中),请将以下sonar.exclusions 属性添加到pom的properties

<properties>
  ...
  <sonar.exclusions>**/*Bean.java,src/main/java/org/sonar/*</sonar.exclusions>
</properties>

【讨论】:

【参考方案5】:

&lt;sonar.exclusions&gt; 中提到的类/包将给定的类排除在 Sonar 的所有静态分析之外,但是 &lt;sonar.coverage.exclusions&gt; 仅将给定的类/包排除在覆盖范围之外,并且仍会针对其他参数进行分析。

<properties>
    <sonar.coverage.exclusions>
        **/domain/**/*,
        **/pojos/*
    </sonar.coverage.exclusions>
</properties>

参考:

https://docs.sonarqube.org/display/SONAR/Analysis+Parameters#AnalysisParameters-Exclusions/Inclusions

来源:

https://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus#NarrowingtheFocus-IgnoreCodeCoverage https://docs.sonarqube.org/display/SONAR/Analysis+Parameters#AnalysisParameters-Exclusions/Inclusions https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Maven#AnalyzingwithSonarQubeScannerforMaven-ExcludingamodulefromSonarQubeanalysis

【讨论】:

在 6.5 版中,如果您在每个条目之间添加新行,则会出现错误。请看jira.sonarsource.com/browse/SONAR-9666 请注意 将从所有静态分析和代码覆盖范围中排除匹配的文件。此外,多个匹配器之间需要逗号。 只是为了确认这适用于 JaCoCo 版本 0.8.6 和 SonarQube 版本 9.0.1【参考方案6】:

POM 文件的声纳排除项(如其他声纳属性)have to be added to the &lt;properties&gt; section。像这样(从当前项目中排除 jOOQ 自动生成的代码的示例):

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <sonar.host.url>http://www.example.com/</sonar.host.url>
    <sonar.jdbc.url>jdbc:postgresql://www.example.com/sonar</sonar.jdbc.url>
    <sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver>
    <sonar.jdbc.username>sonar</sonar.jdbc.username>
    <sonar.jdbc.password>sonar</sonar.jdbc.password>
    <sonar.exclusions>org/binarytherapy/generated/**/*, **/GuiceBindComposer.java</sonar.exclusions>
    <sonar.dynamic>reuseReports</sonar.dynamic>
</properties>

【讨论】:

当字符串很快变得很长时,指定许多排除项的最佳选择是什么? 可以放在多行;只需在每个逗号后换行即可。 com/vedant/pt/request/*.java 我将此添加到 pom 属性中,并且不排除此包下的类。任何帮助将不胜感激 如果你想排除包下的所有类,你应该像我的例子那样做/**/*。您可以在此处阅读有关 Ant 样式路径匹配的更多信息:ant.apache.org/manual/dirtasks.html @MikkelLøkke - 有什么方法可以禁用pom.xml 文件中的特定规则?我不能在声纳中禁用它,因为它在组织级别使用。

以上是关于配置 Sonar 以从 Maven pom.xml 中排除文件的主要内容,如果未能解决你的问题,请参考以下文章

pom.xml(Maven 多模块项目)中的 <sonar.exclusions> 在本地工作,但不在公司服务器上

从Maven pom.xml更新sonar-project.properties文件中的特定属性?

SonarQube 正在使用 pom.xml 并忽略 sonar-project.properties 文件

maven:从属性文件中读取 sonar.login

maven 配置文件 settings.xml pom.xml

maven中pom.xml配置文件怎么看