3

因为工作需要最近接触到了SonarQube,需要根据项目自定义Java和Xml规则,由于国内的资料实在是比较少,并且官网的资料全是英文的,看起来实在是头疼,所以希望写点资料能够帮助到其他人。
官网地址:https://www.sonarqube.org
在此感谢hu_qingen (古月随笔) 和 冯澍雨 提供的帮助

基本思路

1、下载官方提供的规则插件包
2、根据需求编写规则类
3、编译打包
4、上传自定义规则插件

下载地址:
1、Java自定义规则插件:
https://github.com/SonarSourc...

2、Xml自定义规则插件:
https://sonarsource.bintray.c...

开发环境

JDK1.8以上
Mavean
Jenkins

编写方法

目前SonarQube自定义规则支持的方式有两种: 编写java类和编写XPath表达式,这两种方式都是基于AST(Abstract Syntax Tree抽象语法树)语法结构来实现的。
1、Xpath方式
需求:
从Java代码中查找是否存在 while {}这种语法结构

表达式代码:
//WhileStatement[not(Statement/Block)]

步骤:
将表达式代码放入自定义规则插件中的Expression中

clipboard.png

这种方式需要借助第三方工具来写表达式,并且要对Xpath语法比较熟练,我觉得并不是很强大,需要花一定的时间学习。

2、Java方式
需求:从Xml文件中查找,元素是否存在“zbc_test”这样的内容
步骤:
① 创建自定义规则类
sonar-xml-plugin/src/main/java/org/sonar/plugins/check

clipboard.png

② 根据规则需求编写代码

clipboard.png

③ 注册新加入的规则

clipboard.png

④ 编写规则描述及等级分类文件,名字要和规则类中的Key相同或者规则类名相同

sonar-xmlplugin/src/main/resources/org/sonar/l10n/xml/rules/xml/DbSchemalCheck.html

clipboard.png

sonar-xml-plugin/src/main/resources/org/sonar/l10n/xml/rules/xml/DbSchemalCheck.json

clipboard.png

编译打包

Eclipse选择要编译打包的项目文件,使用Maven进行编译,如果编译时不需要进行单元测试,可以跳过测试。

clipboard.png

编译成功

clipboard.png

将编译好的插件上传至指定路径:/sonarqube-6.3/extensions/plugins

clipboard.png

重新启动SonarQube,进入菜单Administration—System - Update Center 查看自定义规则插件是否安装成功

clipboard.png

clipboard.png

查看自定义规则

进入SonarQube - Rules 选择XML可以查看刚刚编写的自定义规则:

clipboard.png

自定义规则的描述如下:
clipboard.png

测试自定义规则

两种方法,编写单元测试类和手工测试,需要根据规则的复杂程度进行选择。
编写Java单元测试类:
java-custom-rules/src/test/java/org/sonar/samples/java/checks/MyCustomSubscriptionRuleTest.java

clipboard.png

编写Xml单元测试类:

sonar-xml-plugin/src/test/java/org/sonar/plugins/xml/checks/IllegalTabCheckTest.java

手工测试:

进入Jenkins,选择要扫描的项目进行构建,构建完成后点击右侧的SonarQube蓝色图标,查看扫描结果

clipboard.png

选择左侧的选项,查看所有存在问题的文件和错误规则

clipboard.png

点击文件名查看所有扫描出来的错误代码及说明

clipboard.png

总结

刚开始以为只要写几个表达式,就可以很方便实现复杂的规则,但是摸索了几天查了几天的Google ,才知道还是要下载官方的自定义规则插件,然后用Java编写自己的规则类,饶了一大圈很累。
我还下载了其他的一些SonarQube插件,通过查看代码发现,基本都遵守并实现了官方的Plugin接口


xqqboy
3 声望3 粉丝