- 环境配置
sonarqueb 6.7
jdk 1.8
p3c 1.3.6
(本人集成代码例子:https://github.com/JacksonZhangHuaQuan/sonar-pmd-plugin.git)
- 集成P3C
(sonar-pmd是sonar官方的支持pmd的插件,但是还不支持p3c,实际上官方的pmd版本还一直没有更新,pmd最新版本已更新至5.8.1,但是插件中的版本依然是5.2.4。Clone:SonarQubeCommunity/sonar-pmd
https://github.com/SonarQubeCommunity/sonar-pmd.git)
3. 添加POM依赖包
<!-- https://mvnrepository.com/artifact/com.alibaba.p3c/p3c-pmd -->
<dependency>
<groupId>com.alibaba.p3c</groupId>
<artifactId>p3c-pmd</artifactId>
<version>1.3.6</version>
</dependency>
</dependencies>
4. 添加 pmd.properties
rule.pmd.CommentsMustBeJavadocFormatRule.name=CommentsMustBeJavadocFormatRule
5. 添加 rules.xml
<!--p3c-->
<rule key="CommentsMustBeJavadocFormatRule">
<priority>MAJOR</priority>
<configKey><![CDATA[rulesets/java/ali-comment.xml/CommentsMustBeJavadocFormatRule]]> </configKey>
</rule>
6. 添加pmd-model.xml文件
<!--p3c-->
<chc>
<rule-repo>p3c</rule-repo>
<rule-key>CommentsMustBeJavadocFormatRule</rule-key>
<prop>
<key>remediationFunction</key>
<txt>CONSTANT_ISSUE</txt>
</prop>
<prop>
<key>offset</key>
<val>2</val>
<txt>min</txt>
</prop>
</chc>
7. 添加描述文件 — CommentsMustBeJavadocFormatRule.html.内容来自p3c对应xml 用于错误详情页面的展示
<p>Look for qualified this usages in the same class.</p>
<p>Examples:</p>
<pre>
/**
*
* XXX class function description.
*
*/
public class XxClass implements Serializable {
private static final long serialVersionUID = 113323427779853001L;
/**
* id
*/
private Long id;
/**
* title
*/
private String title;
/**
* find by id
*
* @param ruleId rule id
* @param page start from 1
* @return Result<Xxxx>
*/
public Result<Xxxx> funcA(Long ruleId, Integer page) {
return null;
}
}
</pre>
- 将上面项目mvn package 出来的jar包拷贝到 sonarqube-6.5\extensions\plugins下面
- 运行sonarqube-6.7\bin\windows-x86-64\StartSonar.bat
(注:暂时是在原有基础上添加一条规则,没有删除现有部分rule;如用完整添加48条规则,请到上面GitHub上(https://github.com/JacksonZhangHuaQuan/sonar-pmd-plugin.git
)把代码拷下来慢慢研究)