2017年9月底,阿里巴巴集团发布了《阿里巴巴Java开发手册》PDF终极版,2017年10月14日,在2017杭州云栖大会上,Java代码规约插件全球首发,p3c-pmd插件支持Eclipse4.2以上版本和IDEA14.1.7以上版本。java
阿里Java代码规约插件有Eclipse插件和IDEA插件。node
Eclipse版插件支持4.2(Juno,JDK1.8+)及以上版本,经过 Help
-- Install New Software 而后输入https://p3c.alibaba.com/plugi... 便可看到安装列表。能够经过 Help-- Check for Udates 进行插件新版检测。git
勾选Ali-CodeAnalysis,Next,安装完成后重启便可。github
IDEA版的插件已发布到IDEA官方仓库中(最低支持版本14.1.7,JDK1.7+),只需打开File-- Settings --Plugins -- Browse repositories 输入 Alibaba 搜索即可以看到对应插件,点击安装等待安装完成。IDEA会自动检测插件新版并提示。
File--Setting--Plugins--Browse repositories编程
检索alibaba,第一个就是Alibaba Java Coding Guidelines,点击右侧Install便可,能够看到下载量是6天前已经发布。安装完毕后重启IDEA便可。微信
重启IDEA后,能够看到Tools菜单下面有阿里编程规约的插件,有三项子功能:
编程规约扫描(快捷键Ctrl+Alt+Shift+J)、
关闭/打开实时检测功能、
切换语言至英文(English):点击后提示:SmartFox Intellij IDEA Plugin切换语言成功,重启后生效
中文界面以下:并发
英文界面以下:框架
这里仅仅以IDEA环境为例进行说明,Eclipse操做相似eclipse
File-Settings-Editor- Inspections,打开后右侧找到Ali-Check,能够看到不少代码检查规则,能够修改规则对应提示的颜色。这里一共有55条规则。maven
以编程规约之命名风格为例:
在当前类中右键或者在左侧Project视图中类名称上右键,选择Alibaba Coding Guidelines Analyze, 能够对某一个类进行代码分析;也能够直接在Project视图中,项目的包上面单击右键,选择Alibaba Coding Guidelines Analyze,能够批量分析包中全部类
分析结果在IDEA底部逐条给出,咱们仍是对上面的类进行分析,结果以下:
单击红色矩形框能够跳转到代码所在行。
P3C-PMD插件基于PMD实现了《阿里巴巴Java开发手册》中涉及的48条规则。
编程规约 (六)并发处理,实现了一、二、三、四、五、十、十一、12等8条规则;
编程规约(五)集合处理,实现了四、五、六、七、九、11等6条规则;
编程规约(一)命名风格,实现了一、二、三、四、五、六、七、八、九、13等10条规则;
编程规约(二)常量定义,实现了一、2等2条规则;
编程规约(四)OOP规约,实现了五、六、七、八、九、十二、17等7条规则;
编程规约(七)控制语句,实现了一、二、4等3条规则;
编程规约(八)注释规约,实现了一、二、三、四、5等5条规则;
编程规约(九)其余,实现了一、三、四、5等4条规则;
异常日志 (一)异常处理,实现了五、七、10等3条规则;
PMD是一种代码静态分析工具,当使用PMD规则分析Java源码时,PMD首先利用JavaCC和EBNF文法产生了一个语法分析器,用来分析普通文本形式的Java代码,产生符合特定语法结构的语法,同时又在JavaCC的基础上添加了语义的概念即JJTree,经过JJTree的一次转换,这样就将Java代码转换成了一个AST,AST是Java符号流之上的语义层,PMD把AST处理成一个符号表。而后编写PMD规则,一个PMD规则能够当作是一个Visitor,经过遍历AST找出多个对象之间的一种特定模式,即代码所存在的问题。
自定义PMD实现规则有以下2种方式:
(1). 自定义Java类并继承AbstractJavaRule抽象类,重写visit()方法,并在xml规则文件中引用该类。
(2). 自定义XPATH表达式,编写xml规则,在规则的properties-property节点中定义XPATH表达式,该表达式是依赖于抽象语法树AST的。
p3c-pmd的项目开源托管在github上,能够自行去https://github.com/alibaba/p3c下载,项目是maven管理,项目代码结构以下:
p3c-pmd插件的实现是基于pmd的,更具体的来讲是基于pmd-java的,由于pmd不只支持java代码分析,还支持其余多种语言。具体实现自定义规则的方式固然也是上节所介绍的2种方式:自定义Java类和XPATH规则。
p3c-pmd插件封装了2个抽象类,分别介绍以下:
(1). 第一个是AbstractAliRule 继承了pmd的 AbstractJavaRule并重写visit(node,data)方法;AbstractPojoRule又继承了AbstractAliRule,用于检测Java类是否有Pojo。
第二个是AbstractXpathRule继承了pmd的抽象类XPathRule,用于处理XPATH规则。
最后给你们一个小小的福利,我把p3c-pmd项目的源码分包生成了对应的类图,你们能够自行下载,关注Java技术日志订阅号后,在消息框回复关键字:p3c或pmd能够获取类图下载地址。
“
本订阅号提供Java相关技术分享,从Java编程基础到Java高级技术,从JavaWeb技术基础Jsp、Servlet、JDBC到SSH、SSM开发框架,从REST风格接口设计到分布式项目实战。剖析主流开源技术框架,用亲身实践来谱写深度Java技术日志。“