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技術日誌。「