最近經常思考團隊開發的一些東西,其中代碼風格不統一是最常見的問題之一。按理說,大家協商和溝通一下,風格統一一下就可以了,其實不然,因為這是個個性張揚的時代!
工作code review中用了CheckStyle小半年了,覺得很好很強大很方便,大家寫出來的代碼就像一個人寫出來的一樣,值此辭舊迎新,特簡做說明,與爾同饗。
1.簡介
官方網站:http://checkstyle.sourceforge.net/
CheckStyle提供了一個幫助JAVA開發人員遵守某些編碼規范的工具。它能夠自動化代碼規范檢查過程,從而使得開發人員從這項重要,但是枯燥的任務中解脫出來。
CheckStyle檢驗的主要內容
(1). Javadoc注釋
(2). 命名約定
(3). 標題
(4). Import語句
(5). 體積大小
(6). 空白
(7). 修飾符
(8). 塊
(9). 代碼問題
(10). 類設計
(11). 混合檢查(包活一些有用的比如非必須的System.out和printstackTrace)
2.定制
官方提供的代碼規范往往太過嚴格,在工作中使用不太現實,所以有必要根據具體情況來定制具體的代碼規范,CheckStyle對代碼規范的定制提供了很多大靈活性。
下面我們來定義一些基本的規范,后續有增加我們再修改。
(1). 不要tab鍵;
(2). 避免重復的import, 多余的import和import *
(3). 常量全部大寫字母(static final);
(4). 成員變量以m開頭;
(5). 當有多重修飾符時,修飾符采用以下順序:(public,protected,private,abstract,static,final,transient,volatile,synchronized,native,strictfp)
... ...
其他的我們后面慢慢的修改。
3.配置文件
在運行checkstyle時,需要一個參數(注:我的ubuntu服務器上安裝的checkstyle5.4版本,最新的是5.5版本):
這個配置文件就是用來定義你自己定制的代碼規范,你可以參考官方說明:http://checkstyle.sourceforge.net/availablechecks.html
這里,我們根據上面說的,來寫這樣一個code_check.xml :
<?xml version="1.0"?> <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.com/dtds/configuration_1_2.dtd"> <module name="Checker"> <!-- 檢查文件是否以一個新行結束--> <module name="NewlineAtEndOfFile"/> <!-- 檢查文件中是否含有tab鍵--> <module name="FileTabCharacter"/> <module name="TreeWalker"> <!-- 常量全部用大寫--> <module name="ConstantName"/> <!-- 避免.*,重復多余的和不使用的import--> <module name="AvoidStarImport"/> <module name="RedundantImport"/> <module name="UnusedImports"/> <!-- 成員變量格式為:m+大寫+字母--> <module name="MemberName"> <property name="format" value="^m[A-Z][a-zA-Z0-9]*$"/> </module> <!-- 檢查代碼塊:起始大括號和if等同行,不能有空的代碼塊,結束大括號另起一行--> <module name="LeftCurly"/> <module name="NeedBraces"/> <module name="RightCurly"/> <!-- 當有多重修飾符時,修飾符采用以下順序: (public,protected,private,abstract,static,final, transient,volatile,synchronized,native,strictfp) --> <module name="ModifierOrder"/> </module> </module>
更多檢查規范中文說明參考園子里地址: http://www.cnblogs.com/liugang/archive/2010/10/26/1860903.html
4.使用checkstyle
插件工具的使用我就不介紹了,我只想起個拋磚引玉的作用,checkstyle命令非常簡單,這里我只說明3個參數:-c, -r, -o。
/******************* ***CheckStyle Usage** ******************/ /*** *參數 *1. -c 配置文件,並驗證文件 *2. -o 輸出結果 *3. -r 遍歷目錄 **/ //用我們定制的code_checks.xml檢查文件 $>checkstyle -c ~/GitProj/world/code_checks.xml ~/GitProj/world/floworld/src/com/tianxia/app/floworld/appreciate/AppreciateLatestActivity.java //用我們定制的code_checks.xml檢查目錄下的所有源文件,並把結果輸出到result.txt中 $>checkstyle -c ~/GitProj/world/code_checks.xml -r ~/GitProj/world/floworld/src/com/tianxia/app/floworld/appreciate/
我們打開result.txt來看下輸出結果:
又是tab又是命名不規范,非常的准確。
5.與Git掛鈎
快12點了,我先把文章發表出來,這部分隨后我再補寫。