我们怎么能忽略Java中的一些SonarQube规则?

问题描述 投票:0回答:4

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

我们想避免规则(和/或配置 SonarQube 建议的优先级和时间)

  1. 记录这个公开课。和
  2. 完成与此 TODO 评论关联的任务。

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

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

我很感激你的建议。

java sonarqube rules sonar-runner sonarqube-scan
4个回答
28
投票

如果你有你想要忽略的规则的 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);

8
投票

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


3
投票

正确的做法是在每个项目的

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

0
投票

也许这些答案有些陈旧,因为在 SonarQube UI 中有一种简单的方法可以做到这一点。

  1. 在 SonarQube 中找到您的项目
  2. 单击问题选项卡
  3. 点击具体问题
  4. 在顶部,您会看到问题代码名称(例如:
    typescript:S1135
    java:S107
    )。复制此代码。
  5. 在屏幕右上角点击项目设置>>常规设置
  6. 单击左侧的 Analysis Scope 选项卡
  7. 向下滚动到“忽略多个标准的问题”
  8. 在本节中,您可以创建排除规则。

例子

  • Ignore an issue everywhere:比如你想到处忽略
    typescript:S1135
    。您输入
    typescript:S1135
    作为规则键模式并输入
    **/*
    作为文件路径模式(** 匹配零个或多个目录。* 匹配零个或多个字符)。
  • 忽略特定文件中的所有问题:输入
    *
    作为规则键模式,输入路径(
    path/to/your/file.js
    )作为文件路径模式。

更多示例:https://docs.sonarqube.org/9.8/project-administration/narrowing-the-focus/#excluding-specific-rules-from-specific-files

© www.soinside.com 2019 - 2024. All rights reserved.