配置 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 中将它们设置为全局共有三种方法。
-
您可以将这些文件添加到您的 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 代码库。
<sonar.exclusions>
和 <sonar.coverage.exclusions>
都没有成功。
我的解决方案是 - 我没有指定排除项,而是指定了包含目录,如下所示:
<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】:<sonar.exclusions>
中提到的类/包将给定的类排除在 Sonar 的所有静态分析之外,但是 <sonar.coverage.exclusions>
仅将给定的类/包排除在覆盖范围之外,并且仍会针对其他参数进行分析。
<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 请注意POM 文件的声纳排除项(如其他声纳属性)have to be added to the <properties>
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>
【讨论】:
当字符串很快变得很长时,指定许多排除项的最佳选择是什么? 可以放在多行;只需在每个逗号后换行即可。/**/*
。您可以在此处阅读有关 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 文件