资讯专栏INFORMATION COLUMN

编写SonarQube自定义Java和Xml规则

Imfan / 3005人阅读

摘要:因为工作需要最近接触到了,需要根据项目自定义和规则,由于国内的资料实在是比较少,并且官网的资料全是英文的,看起来实在是头疼,所以希望写点资料能够帮助到其他人。

因为工作需要最近接触到了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中

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

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

② 根据规则需求编写代码

③ 注册新加入的规则

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

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

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

编译打包

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

编译成功

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

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

查看自定义规则

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

自定义规则的描述如下:

测试自定义规则

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

编写Xml单元测试类:

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

手工测试:

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

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

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

总结

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70121.html

相关文章

  • 使用Jenkins+Sonarqueb进行动化测试代码质量检测

    摘要:是一个用于代码质量管理的开源平台。支持,此处以为例。注意,此处必须保证该私钥对应的公钥即必须配置在上,否则会失败配置完成后点击。单元测试利用命令运行虚拟机进行单元测试,然后把输出结果数据生成报告。 摘要: Jenkins Jenkins是一款开源的持续集成工具,它的特点:易于安装、易于配置、可扩展(自己开发插件),并且它拥有数以百计的成熟插件,这种插件式的特点提供可做任何事情的可能。 ...

    ormsf 评论0 收藏0
  • 使用Jenkins+Sonarqueb进行动化测试代码质量检测

    摘要:是一个用于代码质量管理的开源平台。支持,此处以为例。注意,此处必须保证该私钥对应的公钥即必须配置在上,否则会失败配置完成后点击。单元测试利用命令运行虚拟机进行单元测试,然后把输出结果数据生成报告。 摘要: Jenkins Jenkins是一款开源的持续集成工具,它的特点:易于安装、易于配置、可扩展(自己开发插件),并且它拥有数以百计的成熟插件,这种插件式的特点提供可做任何事情的可能。 ...

    codercao 评论0 收藏0
  • sonarlint在idea&eclipse中安装与使用

    摘要:特点开源的代码质量管控平台,我们使用的即为。一个扩展插件,可以安装在与等开发工具中中的使用安装,搜索。连接的主要目的是同步分析规则质量规则与自定义设置。结果同步显示同部分,此部分要求为。 介绍 ​ 代码质量管理的开源平台,用于管理源代码的质量 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语...

    kycool 评论0 收藏0
  • 每个Java程序员需要了解的8个Java开发工具

    摘要:下面列出了个有助于你开发应用程序最好的工具。官方网站是一个集多功能于一身的故障排除工具。此轻便的工具有着惊人的分析能力。它提供了规则警报阈值排除和设置功能。官方网站以上就是每个程序员需要了解的个开发工具,希望对你有所帮助。 Java是计算机应用程序编程语言,被广泛用于创建Web应用、服务器处理、用户端的API开发乃至数据库等多个领域。下面列出了8个有助于你开发Java应用程序最好的Ja...

    Sleepy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<