【问题标题】:SonarQube Exclude a directorySonarQube 排除目录
【发布时间】:2024-01-04 22:59:01
【问题描述】:

我正在尝试排除 Sonar 分析的目录。我在sonar-project.properties 文件中定义了以下属性:

sonar.sources=src/java
sonar.exclusions=src/java/test/****/*.java

我的目录结构是:

src/java/dig
src/java/test/dig

当我运行 sonar-runner 时,我得到以下信息:

 INFO  - Excluded sources:
 INFO  -   src/java/test/**/*.java
 INFO  - Excluded tests:
 INFO  -   **/package-info.java

但是当我检查分析结果时,测试目录中的所有包都还在。

我只需要告诉 Sonar 不要分析测试目录和其中的任何包。

【问题讨论】:

  • 我找到了解决方案:sonar.exclusions=test/**/*.java
  • 但是如果你想避免测试分析,你可以尝试使用例如 mvn clean package -DskipTests
  • 你为什么使用 4 *?我认为它是 *​​ 用于文件夹和 * 用于字符

标签: sonarqube sonar-runner


【解决方案1】:

你可以像这样跳过库

project(":libABC") {
    apply plugin: 'org.sonarqube'
    sonarqube {
        skipProject = true
    }
}

【讨论】:

    【解决方案2】:

    我输入区分大小写并使用“”,它工作。分析时间从 10 分钟减少到 3 分钟。

    # Additional properties that will be passed to the scanner, 
    # Put one key=value per line, example:
    sonar.exclusions=**\Scripts\**\*,**\Content\**\*
    

    【讨论】:

      【解决方案3】:

      我可以使用以下配置(逗号分隔的文件夹路径)排除多个目录:

      sonar.exclusions=system/**, test/**, application/third_party/**, application/logs/**
      

      在运行声纳跑步者时,我在日志中得到以下信息:

      Excluded sources: 
        system/**
        test/**
        application/third_party/**
        application/logs/**
      

      【讨论】:

      • 我也收到了排除的消息,但文件仍在分析中。
      • 在 Teamcity 参数中,我使用了您的提示,但在 (-Dsonar.exclu...) 之前插入了 -D。在这里工作。 :-)
      • 如何在此处排除所有 *.html 文件的扫描?试过这个sonar.exclusions=**/bin/**,*.html,但它仍然在扫描中需要 html 文件。 Html 文件在几个地方都是子文件夹,在此处添加带有实际路径图的子文件夹级别会更有效。有没有办法我们可以排除所有 *.specific_file_type 被扫描?
      【解决方案4】:

      你可以用build.gradle做同样的事情

      sonarqube {
      properties {
          property "sonar.exclusions", "**/src/java/test/**/*.java"
        }
      }
      

      如果您想排除更多文件/目录,那么:

      sonarqube {
      properties {
          property "sonar.exclusions", "**/src/java/test/**/*.java, **/src/java/main/**/*.java"
        }
      }
      

      【讨论】:

        【解决方案5】:

        这对我有用:

        sonar.exclusions=src/**/wwwroot/**/*.js,src/**/wwwroot/**/*.css
        

        它不包括作为“src”文件夹(项目根目录)的子目录之一出现的文件夹“wwwroot”的任何子目录下的任何 .js 和 .css 文件。

        【讨论】:

        • 这似乎与其他答案没有本质区别。就像许多其他答案一样,它使用双星通配符。它与问题试图排除的内容不匹配。
        【解决方案6】:

        如果您是 Azure DevOps 用户,正在寻找排除文件和文件夹的位置和方式,请点击此处:

        1. 编辑您的管道
        2. 确保已添加“准备对 SonarQube 进行分析”任务。如果您需要帮助配置它,您需要寻找其他地方。 建议:如果您缺少管理链接,请使用 UI 管道编辑器与 yaml 编辑器。目前没有办法从 yaml 转换为 UI。只需重新创建管道。如果使用 git,您可以从 repo 的根目录中删除 yaml。
        3. 在“准备对 SonarQube 进行分析”任务的“高级”部分下,您可以添加排除项。有关特定排除格式,请参阅其他人提供的建议。

        例子:

        # Additional properties that will be passed to the scanner, 
        # Put one key=value per line, example:
        # sonar.exclusions=**/*.bin
        sonar.exclusions=MyProjectName/MyWebContentFolder/**
        

        注意:如果您不确定路径,您可以进入 sonarqube,查看您的项目,查看所有或新的“代码气味”,您需要的路径列在每个问题分组的上方。您可以获取文件的完整路径或使用以下示例中的通配符:

        • MyProjectName/MyCodeFile.cs
        • 我的项目名称/**

        如果您没有添加“运行代码分析”任务,请执行此操作并将其放置在“构建解决方案 **/*.sln”任务之后的某个位置。

        保存并排队,然后检查您的 sonarqube 服务器以查看排除项是否有效。

        【讨论】:

          【解决方案7】:

          将此行添加到您的 sonar-project.properties 文件中

          例如:sonar.exclusions=src/*.java 如果要排除文件夹并且文件夹内有文件必须先排除文件或逐个添加文件时要小心 例如想象有一个像下面这样的文件夹:

          src/app.java src/controllers/home.java src/services/test.java

          你必须这样做: sonar.exclusions=src/app.java,src/controllers/*.java,src/services/*.java

          它对我有用

          【讨论】:

            【解决方案8】:

            添加逗号分隔的文件夹路径 sonar.exclusions=**/abc/**,**/def/**

            这在一个角度项目中起作用

            【讨论】:

              【解决方案9】:

              如果我们想跳过整个文件夹,可以使用以下:

              sonar.exclusions=folderName/**/*
              

              如果我们只有一个特定文件,请给出完整路径。

              此处需要排除并附加的所有文件夹。

              【讨论】:

              • 该答案与sonar.exclusions=folderNamesonar.exclusions=folderName/** 有什么区别?谢谢
              • * - 匹配零个或多个字符 ** - 匹配零个或多个目录? - 匹配单个字符
              【解决方案10】:

              这将适用于您的情况:

              sonar.exclusions=**/src/java/dig/ ** , **/src/java/test/dig/ **
              
              【解决方案11】:

              提一下,一旦您从 Sonar 中排除了文件,对 Jacoco 插件执行相同操作:

              <configuration>
              <excludes>     
              <exclude>com/acme/model/persistence/entity/TransactionEntity*</exclude>
              <exclude>com/acme/model/persistence/ModelConstants.class</exclude>
              </excludes>
              </configuration> 
              

              【讨论】:

                【解决方案12】:

                试试这样的:

                sonar.exclusions=src/java/test/**
                

                【讨论】:

                • 确保对通配符使用 Ant fileglob 模式。这是一个很好的解释:*.com/a/86915/748524
                • 这里是命令行选项定义docs.sonarqube.org/display/SONAR/…
                • 任何看到此内容的人,请确保您拥有src/test/java 而不是src/java/test/
                • 如何在c#中排除方法
                • 文件夹结构也很重要:例如: /webapp/**/* 将排除 webapp 目录下的所有文件。 “”用于目录,“”用于文件。如果你只有 **/webapp/ 那么它不会排除 webapp 文件夹下的文件夹。
                【解决方案13】:

                另一个配置选项是添加一个 maven 属性sonar.exclusions。下面是一个示例 pom 文件,其中排除了静态 jquery 目录和静态 pdf 查看器目录。

                <project >
                <modelVersion>4.0.0</modelVersion>
                <artifactId>my Artifact</artifactId>
                <!-- Enviroment variables can be referenced as such: ${env.PATH} -->
                <packaging>war</packaging>
                <url>http://maven.apache.org</url>
                
                <properties>
                
                    <junit.version>4.9</junit.version>
                    <mockito.version>1.9.5</mockito.version>
                    <jackson.version>1.9.7</jackson.version>
                    <powermock.version>1.5</powermock.version>
                
                    <!--Exclude the files Here-->
                    <sonar.exclusions>src/main/webapp/static/jquery_ui/*,src/main/webapp/static/pdf-viewer/*,src/main/webapp/static/pdf-viewer/**,src/main/webapp/static/pdf-viewer/**/*</sonar.exclusions>
                </properties>
                

                【讨论】:

                  【解决方案14】:

                  最简单的方法是在启动服务器(localhost:8080)后转到服务器 URL,然后以管理员身份登录,转到设置>排除>源文件排除-在此处添加您的包。 重启服务器。

                  【讨论】:

                    【解决方案15】:

                    您使用的是什么版本的声纳? 有一个选项称为“sonar.skippedModules=yourmodulename”。

                    这将跳过整个模块。所以要注意它。

                    【讨论】:

                    • 警告 - 'sonar.skippedModules' 属性自 4.3 版起已弃用,不应再使用。