sonar的页面可以配置新增一条规则吗?
可以,也不可以——取决于你想要的“新增”到底是
A) “把已有规则激活/复制一份,改改阈值或正则”
B) “写一段全新的检查逻辑(例如 BigDecimal.valueOf(float) 也报错)”
SonarQube 的 Web UI 只支持 A,无法完成 B。下面分层说明:
──────────────────────────────
1. UI 能做的:基于模板或现成规则“派生”
──────────────────────────────
• 激活/关闭现有规则:Quality Profile → Activate/Deactivate
• 改参数:点进规则 → Change rule parameters(例如正则、复杂度阈值)
• 使用“Rule Template”创建派生规则
- 只有当某语言分析器提供模板时才看得到“Create”按钮
- 常见例子:
- XML 分析器的 XPath 模板
- Generic Text 分析器的“匹配正则”模板
- 你只是填参数、改描述,底层逻辑还是那段模板代码
=> 换句话说:UI 可以让一条可参数化的规则多长出几个“克隆体”,但不能写新的抽象语法树(AST)遍历逻辑。
──────────────────────────────
2. UI 做不到的:真正的“新增一条自定义规则”
──────────────────────────────
如果想让扫描器再检查
• new BigDecimal(float)
• BigDecimal.valueOf(double/float)
这已经超出现有 java:S2111 的参数范围,属于新增语义规则。
实现途径只有两条,且都离开了 Web UI:
- 写一个自定义插件(SonarJava API、PMD、Checkstyle…),打成 .jar 放进 $SONAR_HOME/extensions/plugins,再在 UI 里激活。
- 在 CI 里跑外部静态分析器(PMD、SpotBugs、ESLint…),把结果通过“External Issues”导入 Sonar。
这才算真正“新增”逻辑。
──────────────────────────────
3. 常碰到的误区
──────────────────────────────
• “Quality Gate 里 + 条件” ≠ 新规则
Quality Gate 只是对已有指标加阈值。
• Marketplace 里装插件,插件带来的规则才能在 UI 里看到并激活。
──────────────────────────────
4. 结论一句话
──────────────────────────────
SonarQube Web 页面只能基于已有可参数化模板派生规则;
要写完全新的扫描逻辑,必须开发或引入插件,然后再到页面里启用它——单纯靠 UI 点几下是做不到的。