【发布时间】:2014-02-01 21:36:40
【问题描述】:
我有一个正在处理的项目,其中一些文件违反了一些规则,但在某种程度上并不是真正的问题,因此会分散注意力。但是,我不想在全局范围内禁用这些规则,也不想将它们一一标记为误报。
有没有办法禁用特定文件的声纳规则,如果可以,如何?
【问题讨论】:
标签: sonarqube
我有一个正在处理的项目,其中一些文件违反了一些规则,但在某种程度上并不是真正的问题,因此会分散注意力。但是,我不想在全局范围内禁用这些规则,也不想将它们一一标记为误报。
有没有办法禁用特定文件的声纳规则,如果可以,如何?
【问题讨论】:
标签: sonarqube
从 SonarQube 4.0 开始,您可以根据规则键和文件路径模式定义 issue exclusion patterns。
在以前的版本中,您可以依赖Switch Off Violations plugin。
【讨论】:
您可以使用 SuppressWarnings 注释类或方法。
这是一个例子:
@java.lang.SuppressWarnings("squid:S00111") squid:S00111 在这种情况下是 Sonar 问题 ID。您可以从 Sonar Web ui 中找到此问题 ID。
【讨论】:
基于 Mithfindel 的回答和 dpk 的评论,这消除了警告
System.out 和 System.err 不应用作记录器
通过为规则 squid:S106 添加忽略模式,从名为 log(或其任何子包)的包中的所有类中:
要查看所有规则的键列表,请转到 质量配置文件 下的配置文件,然后选择 下载 以获取包含所有规则键的 .csv 文件。
我使用的是 SonarQube 4.1.1 版。
【讨论】:
您可以在sonar-project.properties下设置具体的文件和规则,内容如下:
# Ignore Issues
sonar.issue.ignore.multicriteria=e1,e2
# Skip Bold Check
sonar.issue.ignore.multicriteria.e1.ruleKey=Web:BoldCheck
sonar.issue.ignore.multicriteria.e1.resourceKey=**/*.html
# Skip Tag Check
sonar.issue.ignore.multicriteria.e2.ruleKey=Web:S1234
sonar.issue.ignore.multicriteria.e2.resourceKey=**/*.html
根据您的具体需要更改 ruleKey 和 resourceKey。
【讨论】:
是的,有可能。
1.转到管理选项卡->分析范围->问题
2.在那里,你会发现“Ignore Issues on Multiple Criteria”。
3.在“规则键模式”文本框中提供规则ID [可以通过单击特定规则并在右上角找到它来找到规则ID]
4.在“文件路径模式”文本框中提供需要忽略规则的文件路径
5.点击保存问题设置
【讨论】:
使用下面的注释我们可以忽略特定文件中的规则
对于一个规则
@java.lang.SuppressWarnings("squid:S2696")
@Slf4j
@Service
public class PaymentServiceImpl implements PaymentService {....
适用于多个规则
@java.lang.SuppressWarnings({"squid:S2696", "squid:S1172", "squid:CommentedOutCodeLine"})
@Slf4j
@Service
public class PaymentServiceImpl implements PaymentService {...
【讨论】: