我们如何忽略 Java 中的一些 SonarQube 规则?
Posted
技术标签:
【中文标题】我们如何忽略 Java 中的一些 SonarQube 规则?【英文标题】:How can we ignore some SonarQube rules in Java? 【发布时间】:2016-12-30 18:11:11 【问题描述】:我们最近开始使用 SonarQube。我们发现了一些 SonarQube 建议的规则,但我们想忽略它们或给它们低优先级,甚至配置 SonarQube 建议的时间。例如
我们希望避免规则(和/或配置 SonarQube 建议的优先级和时间)
-
记录这个公共类。和
完成与此 TODO 注释关联的任务。
我找不到将这些规则配置为忽略的方法。我们希望在整个项目而不是特定类中忽略这种规则。
配置此值将有助于我们更好地估计修复主要问题的时间,并为上述两个规则提供低优先级。我们正在使用 SonarQube 6
我很喜欢你的建议。
【问题讨论】:
创建一个新的质量配置文件,您可以根据需要进行微调。 您可以从声纳 Web 应用程序激活/停用规则(针对与您的项目关联的配置文件)。但必须登录才能这样做。 @BheshGurung 对于第一个标签,我无法找到要停用的确切标签,但我能找到的最接近的标签是“公共类型、方法和字段 (API) 应使用 Javadoc 记录” (localhost:9000/coding_rules#q=Document 这个公共类|语言=java)。停用后,我应该重新运行扫描仪吗?当我进入分析页面并刷新时,该标签仍然出现,它仍然会影响修复错误所花费的总时间。 【参考方案1】:如果您有要忽略的规则的 id,那么您可以为其添加 SuppressWarnings
示例:
@SuppressWarnings("squid:S0016")
我不太喜欢这个,用来添加评论//NOSONAR 这告诉 SonarQube 忽略特定行的所有错误。
示例 2:
如果我这样做:
System.setErr(System.out);
ConsoleHandler h = new ConsoleHandler();
System.setErr(err);
我的声纳抱怨要求我使用 logger 而不是 system.out...
因此我可以将警告静音:
System.setErr(System.out); //NOSONAR
ConsoleHandler h = new ConsoleHandler();
System.setErr(err);
【讨论】:
你这是在哪里?是在项目级别还是类/文件级别?你在哪里找到鱿鱼?我是该工具的新手。 在文件...java文件...见例子2 不...您需要再次运行扫描仪 SuppressWarnings 注释或 NOSONAR cmets 不是禁用规则的正确方法,因为它们会污染源代码。 @ΦXocę웃Пepeúpaツ 正如 Ann 回答的那样,您需要从质量配置文件中禁用该规则。【参考方案2】:如 cmets 所述,您所要做的就是从您的个人资料中删除规则或对其进行编辑以降低其优先级。您需要全局管理质量配置文件权限才能执行此操作。使用该权限登录后,进入规则界面,搜索您要停用的规则,选择该规则,单击它,然后从相关配置文件中停用它。
【讨论】:
【参考方案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
【讨论】:
以上是关于我们如何忽略 Java 中的一些 SonarQube 规则?的主要内容,如果未能解决你的问题,请参考以下文章