如何在sonarqube的pmd插件中整合阿里开发规范

/ 测试Java / 没有评论 / 2530浏览

一、sonarqube简介

Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpdcheckstylefindbugsJenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。 此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

二、pmd插件整合阿里开发规则

sonar-pmd是sonar官方的支持pmd的插件,但是还不支持p3c,需要在pmd插件源码中添加p3c支持(p3c是阿里在pmd基础上根据阿里巴巴开发手册实现了其中的49开发规则)。

参考文章: https://my.oschina.net/greki/blog/1801462

源码下载地址:https://github.com/mrprince/sonar-p3c-pmd,此源码工程已经在pmd插件的默认268条规则上添加了阿里的48条规则,少了一条AvoidManuallyCreateThreadRule

img 并在pmd插件的默认268条规则上添加了阿里的48条规则,阿里的p3c实现了49条阿里开发规范规则,此工程中少了一条AvoidManuallyCreateThreadRule规则,只需要将sonar-p3c-pmd工程中的默认的268条规则屏蔽掉,添加AvoidManuallyCreateThreadRule 规则,就是我们现在的含有49条阿里开发规则的 pmd插件。

sonar-p3c-pmd工程工程源码改法

  1. 一条校验规则对应分别对应3个配置文件:
  1. 首先注释掉pmd中原默认的268条规则。例如屏蔽掉pmd中原来默认的 StringInstantiation规则。

①. 首先注释掉pmd.properties文件中的 img 注意:规则配置在pmd.properties文件中是以 .name 结尾,不要多注释掉其它的以 .param.xxx结尾的配置,否则可能导致打出的jar包放到sonar下时sonar启动失败 )

②. 注释掉rules.xml中的 StringInstantiation对应的配置 img

③. 注释掉pmd-model.xml中的StringInstantiation对应的配置 img 这样就屏蔽掉了一条默认的pmd规则。

  1. 添加阿里的开发规则,为了区别阿里的p3c规则,这里新建了一个rules-p3c.xml文件。 img 然后在PmdRulesDefinition类中指定一下rules-p3c.xml 路径 img 添加阿里的规则,例如添加CommentsMustBeJavadocFormatRule 规则。 ①. 在 pmd.properties中添加
rule.pmd.CommentsMustBeJavadocFormatRule.name=CommentsMustBeJavadocFormatRule

②. 在 rules-p3c.xml中添加 img

③. 在pmd-model.xml中添加 img

④. 添加描述文件— CommentsMustBeJavadocFormatRule.html.内容来自p3c对应xml 用于错误详情页面的展示 img

  1. 修改p3c的提示语,如leader要求添加 PASS-ALI 前缀,下载p3c-pmd源码 https://github.com/alibaba/p3c,描述内容都在p3c/p3c-pmd/src/main/resources/messages.xml,在messages.xml中每条规则的提示语前添加前缀 PASS-ALI: 。 img 然后将p3c-pmd打包,装到本地仓库 mvn clean install -Dgpg.skip,重新打包sonar-p3c-pmd工程,将打好的jar包放到sonarqube..\extensions\plugins目录下,重启sonarqube。即可安装好整合好只含有阿里开发规则的pmd插件。

  2. 如果想修改pmd插件在sonarqube中的插件显示名,可以修改 sonar-p3c-pmd 工程中的PmdConstantsSring REPOSITORY_NAME 名字即可 img