一、sonarqube简介
Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。 此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
- p3c是阿里在pmd基础上根据阿里巴巴开发手册实现了其中的49开发规则
p3c地址: https://github.com/alibaba/p3c - sonar-pmd是sonar官方的支持pmd的插件,但是还不支持阿里的p3c,需要在pmd插件源码中添加p3c支持
soanr-pmd地址: https://github.com/jensgerdes/sonar-pmd
我们需要做的是将阿里的p3c开发规则以插件形式集成到sonar-pmd中,然后将sonar-pmd打包放到sonarQube的插件包目录下
二、SonarQube使用p3c
我这里已经实现了一版将p3c集成到soanr-pmd中,本人SonarQube版本是sonarqube-7.3,第三节会介绍具体pmd插件整合自定义开发规则的步骤
https://github.com/slowwalkerlcr/sonar-p3c-pmd/tree/pmd_alibaba
使用方法:直接将上面的源码使用maven打包后将sonar-pmd-plugin-3.2.0-SNAPSHOT.jar放入到SonarQube的Sonarqube-7.3/extensions/plugins/目录下重启SonarQube即可
下面是SonarQube效果
三、pmd插件整合阿里开发规则步骤
- 1、在sonar官方的支持pmd的插件sonar-pmd的基础上修改,pom里添加p3c-pmd的支持
<dependency>
<groupId>com.alibaba.p3c</groupId>
<artifactId>p3c-pmd</artifactId>
<version>2.0.0</version>
</dependency>
- 2、sonar-p3c-pmd工程工程源码改法
- (1)一条校验规则对应分别对应3个配置文件
pmd.properties
(src\main\resources\org\sonar\l10n\),rules.xml
(src\main\resources\org\sonar\plugins\pmd\),pmd-model.xml
(src\main\resources\com\sonar\sqale\)。 -
(2) 首先注释掉pmd中原默认的规则。例如屏蔽掉pmd中原来默认的 StringInstantiation规则。
①首先注释掉pmd.properties文件中的
②注释掉rules.xml中的 StringInstantiation对应的配置
③注释掉pmd-model.xml中的StringInstantiation对应的配置
这样就屏蔽掉了一条默认的pmd规则。
(3)添加阿里的开发规则,为了区别阿里的p3c规则,这里新建了一个rules-p3c.xml文件。
然后在PmdRulesDefinition类中指定一下rules-p3c.xml 路径
添加阿里的规则,例如添加CommentsMustBeJavadocFormatRule 规则。
①在 pmd.properties中添加
rule.pmd.CommentsMustBeJavadocFormatRule.name=CommentsMustBeJavadocFormatRule
②在 rules-p3c.xml中添加
③在pmd-model.xml中添加
④添加描述文件— CommentsMustBeJavadocFormatRule.html.内容来自p3c对应xml 用于错误详情页面的展示
<p>类、类属性、类方法的注释必须使用javadoc规范,使用/**内容*/格式,不得使用//xxx方式和/*xxx*/方式。</p>
<p>说明:在IDE编辑窗口中,javadoc方式会提示相关注释,生成javadoc可以正确输出相应注释;在IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。</p>
<p>Examples:</p>
<pre>
/**<br>
*<br>
* XXX class function description.<br>
*<br>
*/<br>
public class XxClass implements Serializable {<br>
private static final long serialVersionUID = 113323427779853001L;<br>
/**<br>
* id<br>
*/<br>
private Long id;<br>
/**<br>
* title<br>
*/<br>
private String title;<br>
<br>
/**<br>
* find by id<br>
* <br>
* @param ruleId rule id<br>
* @param page start from 1<br>
* @return Result<Xxxx><br>
*/<br>
public Result<Xxxx> funcA(Long ruleId, Integer page) {<br>
return null;<br>
}<br>
}
</pre>
重新打包sonar-p3c-pmd工程,将打好的jar包放到sonarqube的 ..\extensions\plugins目录下,重启sonarqube。即可安装好整合好只含有阿里开发规则的pmd插件。
(4)如果想修改pmd插件在sonarqube中的插件显示名,可以修改 sonar-p3c-pmd 工程中的PmdConstants类 Sring REPOSITORY_NAME 名字即可
SoanrQube效果图