最近經常思考團隊開發的一些東西,其中代碼風格不統一是最常見的問題之一。按理說,大家協商和溝通一下,風格統一一下就可以了,其實不然,因為這是個個性張揚的時代!
工作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點了,我先把文章發表出來,這部分隨后我再補寫。
