由于Sonarqube的扫描规则只能通过打包jar形式才能被录入并使用,而且尚未支持界面自定义规则功能,所以提出了实现扫描规则自定义的需求。
我们以sonar-pmd-p3c插件为例,首先需要下载的sonar-pmd-p3c插件源码
GitHub - caowenliang/sonar-pmd-p3c: sonarQube 整合 阿里p3c
以下是sonar规则自定义步骤,我们以添加PMD规则中bestpractices.xml的Avoid StringBuffer Field规则为例

1、首先需要修改的文件有3处
sonar-pmd-plugin/src/main/resources/org/sonar/plugins/pmd/rules.xml
sonar-pmd-plugin/src/main/resources/org/sonar/|10n/pmd.properties
sonar-pmd-plugin/src/main/resources/com/sonar/sqale/pmd-model.xml
2、接着在rules.xml中添加以下配置。其中priority是设置该规则的级别,status是设置该规则的状态(决定该规则是否废弃或使用)

3、然后在pmd-model.xml中添加以下配置
4、接着在pmd.properties中添加以下配置

5、最后还需要在sonar-pmd-plugin/src/main/resources/org/sonar/|10n/pmd/rules/pmd/路径下创建该规则对应的html文件,用于展示前端页面的规则描述(注意:文件名与规则名匹配) 
6、修改完成后,重新打包,将其存放于/extensions/plugins/路径下,重启sonar即可(注意不要使用root权限重启)
7、需要注意的是,规则的添加还需要考虑其支持的版本。
