我们如何忽略 Java 中的某些 SonarQube 规则?

How can we ignore some SonarQube rules in Java?

我们最近开始使用 SonarQube。我们发现了一些 SonarQube 建议的规则,但我们想忽略它们或给它们低优先级,甚至配置 SonarQube 建议的时间。例如

我们想避免

的规则(and/or配置SonarQube建议的优先级和时间)
  1. 记录此 public class。和
  2. 完成与此 TODO 评论关联的任务。

我找不到将此规则配置为忽略的方法。我们希望整个项目都忽略这种规则,而不是特定的 classes.

配置此值将帮助我们更好地估计时间来解决主要问题,并为上述两个规则提供低优先级。我们正在使用 SonarQube 6

我很感激你的建议。

如果您有您想要忽略的规则的 ID,那么您可以为此添加 SuppressWarnings

示例:

@SuppressWarnings("squid:S0016")

我不太喜欢这个,用来添加评论 //NOSONAR 告诉 SonarQube 忽略特定行的所有错误。

示例 2:

如果我这样做:

System.setErr(System.out);
ConsoleHandler h = new ConsoleHandler(); 
System.setErr(err);

我的声纳抱怨要求我使用记录器而不是 system.out...

因此我可以让警告静音:

System.setErr(System.out);  //NOSONAR 
ConsoleHandler h = new ConsoleHandler(); 
System.setErr(err);

如评论中所述,您所要做的就是从您的个人资料中删除规则或编辑它们以降低其优先级。您需要全局管理质量配置文件权限才能执行此操作。使用该权限登录后,转到规则界面,搜索要停用的规则,select 规则,单击它,然后从相关配置文件中将其停用。

正确的做法是在每个项目的 sonar-project.properties 文件中放置这样的内容:

sonar.issue.ignore.multicriteria=e1,e2
# tab characters should not be used
sonar.issue.ignore.multicriteria.e1.ruleKey=squid:S00105
sonar.issue.ignore.multicriteria.e1.resourceKey=**/*.java
# right curly braces should be on a new line
sonar.issue.ignore.multicriteria.e2.ruleKey=squid:RightCurlyBraceStartLineCheck
sonar.issue.ignore.multicriteria.e2.resourceKey=**/*.java