checkstyle中文教程

Checkstyle4.3 中文手冊
加入OpenDoc前的 預覽版。
申 思維

1.0

版權 © 2008 申思維

本文根據Checkstyle4.3 英文官方文檔而來。我打算髮布成OpenDoc, 歡迎大家給我來信,多提意見!謝謝

目錄

1. 前言
1. 介紹

1.1. 概述
1.2. 特點
1.3. 下載

2. N分鐘入門
3. 常用的檢查

3.1. 典型的配置文件

4. 用的最多的20%功能
5. 在Ant中使用Checkstyle

5.1. N分鐘極速入門
5.2. 安裝與配置
5.3. 典型例子
5.4. checkstyle任務的參數
5.5. 可以嵌套的ant元素

6. 在Eclipse中使用Checkstyle

6.1. 下載和安裝
6.2. 配置方法
6.3. 使用
6.4. 常見問題

7. 各種檢查

7.1. 如何配置檢查
7.2. JavaDoc註釋

7.2.1. 類和接口的javadoc
7.2.2. 方法的javadoc
7.2.3. 方法的javadoc
7.2.4. 變量的javadoc

7.3. 命名約定

7.3.1. 模塊一覽
7.3.2. 注意

7.4. 文件頭
7.5. Imports

7.5.1. import中避免星號"*"
7.5.2. 沒用的import

7.6. 長度限制

7.6.1. 文件長度
7.6.2. 每行長度
7.6.3. 方法長度
7.6.4. 方法的參數個數

7.7. 空格

7.7.1. 方法名與左邊圓括號之間
7.7.2. 圓括號附近的空格
7.7.3. 類型轉換中圓括號附近的空格
7.7.4. 對"Tab"的檢查
7.7.5. 特定符號後的空格

7.8. 關鍵字

7.8.1. 關鍵字的出現順序
7.8.2. 多餘的關鍵字

7.9. 對區域(empty block)的檢查

7.9.1. 空白區域
7.9.2. 對左側括號{ 的檢查(略)
7.9.3. 需要括號的區域
7.9.4. 對右側括號} 的檢查(略)
7.9.5. 不必要的括號

7.10. 編碼的檢查

7.10.1. 數組尾巴的逗號
7.10.2. 避免內聯(inline)條件判斷
7.10.3. override的equals方法
7.10.4. 空語句(statement)
7.10.5. equals和hashCode方法
7.10.6. 應該聲明成final的局部變量
7.10.7. 不合適的初始化
7.10.8. 不合適的token
7.10.9. 內部賦值語句
7.10.10. 魔法數
7.10.11. 丟了default分支的switch
7.10.12. 被更改的循環控制變量
7.10.13. 多餘的throw
7.10.14. 未被簡化的條件表達式
7.10.15. 未被簡化的布爾返回值
7.10.16. 字符串(String)的比較
7.10.17. 嵌套的if 層次
7.10.18. 嵌套的try 層次
7.10.19. 調用父類的clone
7.10.20. 父類的finalize
7.10.21. 不合理的catch
7.10.22. 不合理的throws
7.10.23. package 聲明
7.10.24. JUnitTestCase
7.10.25. return 語句的數量
7.10.26. 聲明的順序
7.10.27. 參數被賦值
7.10.28. 詳盡的變量初始化
7.10.29. switch語句的default位置排在最後
7.10.30. 丟失的構造函數
7.10.31. switch中錯誤分支。
7.10.32. 多個內容相同的字符串變量
7.10.33. 同一行禁止聲明多個變量
7.10.34. 不使用this
7.10.35. 不必要的圓括號

7.11. Class的設計

7.11.1. 可見的修改方法
7.11.2. Final class
7.11.3. Interfacels Type
7.11.4. 隱藏工具類的構造方法
7.11.5. 方便繼承(extention)而進行的設計
7.11.6. throws的數量

7.12. 重複的代碼

7.12.1. StrictDuplicateCode 嚴格的重複代碼檢查

7.13. 各種量度

7.13.1. 布爾表達式的複雜度
7.13.2. 類數據的抽象耦合
7.13.3. 類的分散複雜度
7.13.4. 函數的分支複雜度
7.13.5. Npath複雜度

7.14. 雜項

7.14.1. 禁止使用的表達式
7.14.2. 文件結尾的回車
7.14.3. Todo註釋
7.14.4. 翻譯屬性文件
7.14.5. 沒有被註釋掉的Main函數
7.14.6. 大寫的L
7.14.7. 聲明數組的風格
7.14.8. final型的參數
7.14.9. 縮進
7.14.10. 與代碼同行的註釋
7.14.11. 必須出現的字符串

術語表
參考書目

插圖清單

2.1. 測試如何使用checkstyle的項目
2.2. 開啓Checkstyle
2.3. 代碼窗口中的錯誤提示
2.4. Problems窗口中的錯誤提示
2.5. 增加了class的註釋後的效果圖
2.6. 使用自定義的Checkstyle配置文件
2.7. 定製配置的檢查結果
2.8. 修正後的定製配置的檢查結果
5.1. 在Ant環境下Checkstyle的所須文件
5.2. Ant下Checkstyle檢查正確的結果
5.3. Ant下Checkstyle檢查錯誤的結果
6.1. 成功安裝Checkclipse後的Preferences窗口
6.2. 配置單個項目的Checkclipse
6.3. 設置單個項目的Checkclipse的文件過濾器(file filter)
6.4. 出錯信息中的檢查名
6.5. Problems的過濾器中配置Checkclipse。
6.6. 右鍵菜單中的checkstyle選項

表格清單

5.1. checkstyle任務屬性表
5.2. formatter元素的屬性
7.1. 命名約定檢查模塊一覽表
7.2. WhitespaceAfter 屬性列表
7.3. 重複代碼插件的特性摘要:
7.4. GenericIllegalRegexp的屬性列表
7.5. NewlineAtEndOfFile的屬性列表
7.6. Indentation的屬性列表

前言
Preface

Checkstyle是非常優秀的代碼規範檢查軟件,可以大幅的提高代碼質量, 當項目的開發人員比較多時,用它來統一代碼風格是很有必要的。

本文的寫作,是由於公司的質量管理部門對代碼格式進行了要求。 在網上也沒有發現有比較詳細全面的中文文檔。所以參考Checkstyle4.3的官方文檔寫就。

有 個比較神奇的20%-80%規律是這樣說的:一本書,用的最多的只是20%的內容,它的出現機率是80%; 而剩下的80%內容,被使用的不到20%。這個規律也同樣適用在其他東東上。只是數據上稍有差異。 所以我特意安排了 第 4 章 用的最多的20%功能 ,作爲典型的使用方法。

對於趕時間的朋友,也可以直接看第 2 章 N分鐘入門 ,可以讓你在最快的時間內入門。 對於時間充沛的朋友,建議多看看文檔。因爲作者一再的強調“it is worth reading the documentation”。

第 5 章 在Ant中使用Checkstyle 說明了在ant下的用法。第 6 章 在Eclipse中使用Checkstyle 說明了Eclipse的插件Checkclipse的用法。

對於初次接觸代碼規範的朋友,我安排了第 3 章 常用的檢查 ,裏面是個人以爲滿足大多數公司要求的檢查,包括一個配置文件。

第 7 章 各種檢查 是各種檢查的詳細用法,讀起來比較枯燥,建議象查字典那樣有需要時翻閱,所以放在最後。
[小心] 歡迎意見

爲了加入OpenDoc , 歡迎各位朋友指出文檔中的任何錯誤和不足,也可以給我任何意見。請Email給我:shensiwei(at)sina.com

希望本文對您有用。謝謝!
第 1 章 介紹
Introduction

目錄

1.1. 概述
1.2. 特點
1.3. 下載

1.1. 概述

Checksytle 是一款代碼格式檢查工具。它可以根據設置好的編碼規則來檢查代碼。 比如符合規範的變量命名,良好的程序風格等等。如果你的項目經理開會時說,“我希望我們寫出來的代碼就象一個人寫的!” 時,用Checkstyle絕對是正確選擇。:)

本文檔就是在4.3的基礎上完成。截止到2008-02-22,最新的版本是4.4。

需要強調的是,Checkstyle只能做檢查,而不能做修改代碼。
[小心] 提醒

想修改代碼格式,請使用Jalopy. 它和Checkstyle配合使用非常合適。
1.2. 特點

Checkstyle的配置性極強,你可以只檢查一種規則,也可以檢查三十,四十種規則。可以使用Checkstyle自帶的規則, 也可以自己增加檢查規則。(這點跟 Ant 自定義target比較象)

支持幾乎所有主流IDE,包括 Eclipse , IntelliJ, NetBeans, JBuilder 等11種。
1.3. 下載

最新的發佈版本在 : 這裏

4.4使用了SVN,關閉了CVS。SVN在 這裏

各種插件下載,見 Checkstyle主頁 中的列表。
第 2 章 N分鐘入門
extreme learning

讓您在幾分鐘之內瞭解Checkstyle的大致用法。適合趕時間的朋友。假設您已經安裝好了Checkstyle的Eclipse插件。
[小心] 測試

歡迎在閱讀下一行之前,記錄下當前的時間,然後在讀完本節之後,算算您用了多少時間。 如果方便,請將您用的時間告訴我,謝謝:)

1.

首先,我們建立一個eclipse的項目:test_checkstyle。包含一個源文件夾:src,一個目標生成文件夾 eclipse_build. 如 圖 2.1 “測試如何使用checkstyle的項目” 所示。
測試如何使用checkstyle的項目

圖 2.1. 測試如何使用checkstyle的項目
2.

在項目中開啓Checkstyle: 打開該project的屬性,點中左側的Checkclipse後,將"Enable Checkstyle"前面打上勾。 如 圖 2.2 “開啓Checkstyle” 所示。
開啓Checkstyle

圖 2.2. 開啓Checkstyle
3.

建立一個測試用的Class: 比如SomeClassToBeChecked,內容如下:

/*
* Copyright (c) 2001-2008 Beijing BidLink Info-Tech Co., Ltd.
* All rights reserved.
* Created on 2008-2-22
*
* $Id: learn_in_5_min.xml,v 1.3 2008/03/03 03:43:44 Administrator Exp $
*/
package test;

public class SomeClassToBeChecked {

}


只有一個頭部註釋,沒有方法,啥啥都沒有。
4.

用 Checkstyle檢查它:右鍵點項目名,選擇"Build Project",會把src文件夾進行編譯,把class文件放到eclpise_build中。 結束之後,我們可以看到: 圖 2.3 “代碼窗口中的錯誤提示” 中的代碼第10行處,有一個歎號,把鼠標移上去就會出現 提示"Missing a Javadoc comment."
代碼窗口中的錯誤提示

圖 2.3. 代碼窗口中的錯誤提示

同時,在Problems窗口中也有提示,如 圖 2.4 “Problems窗口中的錯誤提示” 所示。
Problems窗口中的錯誤提示

圖 2.4. Problems窗口中的錯誤提示
5.

修改代碼:既然提示說缺少了Javadoc註釋,我們就把它加上。 如 圖 2.5 “增加了class的註釋後的效果圖” 所示。
增加了class的註釋後的效果圖

圖 2.5. 增加了class的註釋後的效果圖

然後重新編譯,可以看出,Warning沒有了。檢查通過。
[小心] 注意

上 面的很簡單是吧?恩,我也這麼覺得。但別走!如果以爲這樣就可以用Checkstyle, 那你就錯了。你可以試一下用同樣的方式來編譯一個項目,會發現根本是Warning滿天飛。爲什麼?因爲Checkstyle自帶的檢查非常變態, 隨便一個項目都可以弄出幾千個Warning。所以,想用它,一定要使用自己的定製檢查。:)
6.

定製檢查:Checkstyle沒有圖形化的定製器,所以需要手工修改配置文件。比如,我們的代碼需要符合下列規則:
*

長度方面:文件長度不超過1500行,每行不超過120個字,方法不超過60行.
*

命名方面:類名不能小寫開頭,方法名不能大寫開頭,常量不能有小寫字母。
*

編碼方面:不能用魔法數(Magic Number),if最多嵌套3層。

那麼,我們的檢查配置文件(如命名成 my_check.xml ) 應該是這樣的:

<?xml version="1.0" encoding="UTF-8"?>
<!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="TreeWalker">

<!-- 長度方面的檢查 -->
<!-- 文件長度不超過1500行 -->
<module name="FileLength">
<property name="max" value="1500"/>
</module>
<!-- 每行不超過120個字-->
<module name="LineLength">
<property name="max" value="120"/>
</module>
<!-- 方法不超過60行 -->
<module name="MethodLength">
<property name="tokens" value="METHOD_DEF"/>
<property name="max" value="60"/>
</module>

<!-- 命名方面的檢查,它們都使用了Checkstyle默認的規則。 -->
<!-- 類名(class 或interface) 的檢查 -->
<module name="TypeName"/>
<!-- 方法名的檢查 -->
<module name="MethodName"/>
<!-- 常量名的檢查 -->
<module name="ConstantName"/>

<!-- 編碼方面的檢查 -->
<!-- 不能用魔法數 -->
<module name="MagicNumber"/>
<!-- if最多嵌套3層 -->
<module name="NestedIfDepth">
<property name="max" value="3"/>
</module>

</module>
</module>


可以看出,想增加一個檢查,就是增加一個<module/>結點。具體的結點內容在後面的文檔都會寫明。
7.

讓 Checkstyle使用指定的檢查配置文件:打開項目屬性,在Checkclipse中的"Checkstyle Configuration File" 一欄中 選定我們的配置文件,然後確定。如 圖 2.6 “使用自定義的Checkstyle配置文件” 所示。
使用自定義的Checkstyle配置文件

圖 2.6. 使用自定義的Checkstyle配置文件

然 後重新編譯項目,就會發現,Checkstyle的規則如我們所願:只檢查我們在文件中配置的幾項。並且它們是以"Error"級別進行提示,而不是默認 檢查時出現的"Warning"級別。 比如,我們把一個方法中,增加4層嵌套(共5個if),並將方法名大寫,就會出現 圖 2.7 “定製配置的檢查結果” :
定製配置的檢查結果

圖 2.7. 定製配置的檢查結果

可以看到,出現了兩個Error: 方法名的"Name xx must match pattern..." 和if嵌套的"Nested if-else depth is 4..."。 把它們都改過來,程序就好了。
8.

代碼的修正:依照上面的例子,把方法名小寫,if循環嵌套3層,然後重新編譯,OK。如: 圖 2.8 “修正後的定製配置的檢查結果”
修正後的定製配置的檢查結果

圖 2.8. 修正後的定製配置的檢查結果

到這裏就結束了。看明白了嗎?歡迎給我意見,以及看到這裏所用的時間。:)

想在N分鐘內瞭解ant下checkstyle的使用方法,請看 第 5.1 節 “N分鐘極速入門”
第 3 章 常用的檢查

目錄

3.1. 典型的配置文件

Checkstyle 自帶了兩個配置文件:checkstyle_checks.xml 和 sun_checks.xml。前者是checkstyle作者定義的,後者是嚴格符合Sun編碼規範 的。 可惜它們的檢查太過嚴格,任何一個項目都會搞出上千個Warning來。

所以這裏提供了一個配置文件,包含了比較常用的檢查,去掉了對空格位置,大括號位置等國內不注重的內容, 建議個人使用。

如果是公司使用,建議把它再精簡些。因爲對公司來說,這個配置文件還是比較苛刻的。
3.1. 典型的配置文件

下面是一個典型的checkstyle配置文件,應該適合於大多數情況的要求。每個檢查前的註釋說明了它的作用。本文的PDF文檔 無法正常顯示其中的漢字,建議本節使用HTML版查看。:)

<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.2//EN"
"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<module name="Checker">

<!-- 重複代碼的檢查,超過8行就認爲重複,UTF-8格式
本檢查一定要放在"TreeWalker"節點前,否則在
Checkclipse中會無法使用。(在ant下可以)
-->
<module name="StrictDuplicateCode">
<property name="min" value="8"/>
<property name="charset" value="UTF-8"/>
</module>

<module name="TreeWalker">

<!-- javadoc的檢查 -->
<!-- 檢查所有的interface和class -->
<module name="JavadocType"/>

<!-- 檢查所有方法的javadoc,可以不聲明RuntimeException -->
<module name="JavadocMethod">
<property name="allowUndeclaredRTE" value="true"/>
</module>
<!-- 檢查某個變量的javadoc -->
<module name="JavadocVariable"/>

<!-- 命名方面的檢查,它們都使用了Sun官方定的規則。 -->
<!-- 類名(class 或interface) 的檢查 -->
<module name="TypeName"/>
<!-- 變量的檢查 -->
<module name="MemberName"/>
<!-- 方法名的檢查 -->
<module name="MethodName"/>
<!-- 方法的參數名 -->
<module name="ParameterName "/>
<!-- 常量名的檢查 -->
<module name="ConstantName"/>


<!-- 長度方面的檢查 -->
<!-- 文件長度不超過1500行 -->
<module name="FileLength">
<property name="max" value="1500"/>
</module>
<!-- 每行不超過120個字-->
<module name="LineLength">
<property name="max" value="120"/>
</module>
<!-- 方法不超過30行 -->
<module name="MethodLength">
<property name="tokens" value="METHOD_DEF"/>
<property name="max" value="30"/>
</module>
<!-- 方法的參數個數不超過3個。 -->
<module name="ParameterNumber">
<property name="max" value="3"/>
</module>


<!-- 多餘的關鍵字 -->
<module name="RedundantModifier"/>
<!-- 對區域的檢查 -->
<!-- 不能出現空白區域 -->
<module name="EmptyBlock"/>
<!-- 所有區域都要使用大括號。 -->
<module name="NeedBraces"/>
<!-- 多餘的括號 -->
<module name="AvoidNestedBlocks">
<property name= "allowInSwitchCase"
value="true"/>
</module>




<!-- 編碼方面的檢查 -->

<!-- 不許出現空語句 -->
<module name="EmptyStatement"/>
<!-- 每個類都實現了equals()和hashCode() -->
<module name="EqualsHashCode"/>
<!-- 不許使用switch -->
<module name="IllegalToken">
<property name="tokens"
value="LITERAL_SWITCH"/>
</module>
<!-- 不許內部賦值 -->
<module name="InnerAssignment"/>
<!-- 絕對不能容忍魔法數 -->
<module name="MagicNumber"/>
<!-- 循環控制變量不能被修改 -->
<module name="ModifiedControlVariable"/>
<!-- 多餘的throw -->
<module name="RedundantThrows"/>
<!-- 不許使用未被簡化的條件表達式 -->
<module name="SimplifyBooleanExpression"/>
<!-- 不許使用未被簡化的布爾返回值 -->
<module name="SimplifyBooleanReturn"/>
<!-- String的比較不能用!= 和 == -->
<module name="StringLiteralEquality"/>
<!-- if最多嵌套3層 -->
<module name="NestedIfDepth">
<property name="max" value="3"/>
</module>
<!-- try最多被嵌套1層 -->
<module name="NestedTryDepth"/>
<!-- clone方法必須調用了super.clone() -->
<module name="SuperClone"/>
<!-- finalize 必須調用了super.finalize() -->
<module name="SuperFinalize"/>
<!-- 不能catch java.lang.Exception -->
<module name="IllegalCatch">
<property name="illegalClassNames"
value="java.lang.Exception"/>
</module>
<!-- JUnitTestCase 的核心方法存在。 -->
<module name="JUnitTestCase"/>
<!-- 一個方法中最多有3個return -->
<module name="ReturnCount">
<property name="max" value="3"/>
</module>
<!-- 不許對方法的參數賦值 -->
<module name="ParameterAssignment"/>
<!-- 不許有同樣內容的String -->
<module name="MultipleStringLiterals"/>
<!-- 同一行不能有多個聲明 -->
<module name="MultipleVariableDeclarations"/>


<!-- 各種量度 -->
<!-- 布爾表達式的複雜度,不超過3 -->
<module name="BooleanExpressionComplexity"/>
<!-- 類數據的抽象耦合,不超過7 -->
<module name="ClassDataAbstractionCoupling"/>
<!-- 類的分散複雜度,不超過20 -->
<module name="ClassFanOutComplexity"/>
<!-- 函數的分支複雜度,不超過10 -->
<module name="CyclomaticComplexity"/>
<!-- NPath複雜度,不超過200 -->
<module name="NPathComplexity"/>


<!-- 雜項 -->
<!-- 禁止使用System.out.println -->
<module name="GenericIllegalRegexp">
<property name="format" value="System/.out/.println"/>
<property name="ignoreComments" value="true"/>
</module>

<!-- 不許使用與代碼同行的註釋 -->
<module name="TrailingComment"/>

</module>



<!-- 檢查翻譯文件 -->
<module name="Translation"/>

</module>


第 4 章 用的最多的20%功能
Core 20%

這裏列出了個人以爲的20%的最常用功能。歡迎您把自己認爲的20%發過來,我會進行一個統計,及時更新本節。

*

命名符合規範

類,方法,成員變量等等的命名,一般要遵循 Sun編碼規範 。
*

編碼中的長度問題

類,方法的長度不應該過大。
*

編碼習慣的檢查

檢查代碼中是否有過多的if嵌套,魔法數,switch丟失的default, 複雜的條件表達式等。
*

重複的代碼

如果兩個代碼段出現了一定行數的嚴格重複,就判定它們已經重複。

第 5 章 在Ant中使用Checkstyle

目錄

5.1. N分鐘極速入門
5.2. 安裝與配置
5.3. 典型例子
5.4. checkstyle任務的參數
5.5. 可以嵌套的ant元素

如果您趕時間,請看第 5.1 節 “N分鐘極速入門” 。:)
5.1. N分鐘極速入門

(請打開一個秒錶記時,謝謝)

需要"checkstyle-all-4.3.jar",該jar文件包含了checkstyle所用的幾乎所有類。

需要有一個指定的配置文件,比如當前項目中的"./config/my_check.xml"。

另外,把checkstyle-all.jar放在一個合適的目錄中,比如"./lib"。

最後,設置Ant的輸出文件夾爲"./ant_build" 如 圖 5.1 “在Ant環境下Checkstyle的所須文件” 所示。
在Ant環境下Checkstyle的所須文件

圖 5.1. 在Ant環境下Checkstyle的所須文件

ant的配置文件中需要指定一個taskdef來定義checkstyle任務, 然後在checkstyle任務中指定配置文件(config屬性), 和需要被檢查的文件夾(fileset)。本例使用的ant文件是這樣的:

<?xml version="1.0" ?>
<project>
<taskdef resource="checkstyletask.properties"
classpath="./lib/checkstyle-all-4.3.jar"/>
<target name="my_check">
<checkstyle config="config/my_check.xml">
<fileset dir="src" includes="**/*.java"/>
</checkstyle>
</target>
</project>


如果checkstyle檢查通過,則會看到"BUILD SUCCESSFUL", 如 圖 5.2 “Ant下Checkstyle檢查正確的結果” 所示。
Ant下Checkstyle檢查正確的結果

圖 5.2. Ant下Checkstyle檢查正確的結果

如果checkstyle檢查到出錯,就會輸出錯誤信息,包括所有檢查到的錯誤。比如,我們把一個方法的長度超過60,方法名大寫,就會看到出錯信息,並且"BUILD FAILED" 如 圖 5.3 “Ant下Checkstyle檢查錯誤的結果” 所示。
Ant下Checkstyle檢查錯誤的結果

圖 5.3. Ant下Checkstyle檢查錯誤的結果

本節結束,歡迎您把看明白本節所用的時間通過Email告訴我。因爲我想知道標題中的 "N" 是多少。 :)謝謝。
5.2. 安裝與配置

其實本節內容已經被包含在了 第 5.1 節 “N分鐘極速入門” 中,就是擁有checkstyle-all-4.3.jar 這個文件,並且在 ant的配置文件中進行task聲明,如:

<taskdef resource="checkstyletask.properties"
classpath="./lib/checkstyle-all-4.3.jar"/>


然後通過<checkstyle/>任務來運行。
5.3. 典型例子

本節假定使用checkstyle任務的前提條件都已滿足。

使用my_check.xml文件,對src目錄下的所有java文件進行檢查:

<checkstyle config="config/my_check.xml">
<fileset dir="src" includes="**/*.java"/>
</checkstyle>


使用my_check.xml文件,對src目錄下的所有java文件進行檢查,並且把出錯的信息分別寫到兩個文件中:ant_build目錄下的 checkstyle_errors.txt 和checkstyle_errors.xml中:

<checkstyle config="config/my_check.xml">
<fileset dir="src" includes="**/*.java"/>
<formatter type="plain" toFile="ant_build/checkstyle_errors.txt"/>
<formatter type="xml" toFile="ant_build/checkstyle_errors.xml"/>
</checkstyle>


值得一提的是,xml格式的文件裏面把錯誤的信息格式弄的很清晰,調試起來比較方便。如果需要的話可以比較方便的擴展到諸如cruisecontrol裏。

使用定義了package的文件:

<checkstyle config="config/my_check.xml"
packageNamesFile="myPackageNames.xml"
file="src/test/SomeClass.java"/>


5.4. checkstyle任務的參數

checkstyle任務的參數如 表 5.1 “checkstyle任務屬性表” 所示。

表 5.1. checkstyle任務屬性表
名字 描述 是否必須

file


被檢查的文件。


一個file或者fileset

config


Checkstyle的配置文件。配置文件的使用方法見:第 7.1 節 “如何配置檢查”


config或configURL必具其一

configURL


指定了Checkstyle配置文件的URL。用法


config或configURL必具其一

properties


定義了ant使用到的屬性的文件。




packageNamesFile


定義了Checkstyle配置文件中檢查的package name的文件。




failOnViolation


有violation時是否繼續檢查,默認是"true"




failureProperty


The name of a property to set in the event of a violation.




maxErrors


停止build前允許出現的"Error"的最大數目。默認是"0"




maxWarnings


停止build前允許出現的"Warning"的最大數目。默認是"2147483647",也就是Integer.MAX_VALUE.




classpath


類路徑,默認是當前使用的classpath。




classpathref


類路徑的引用。



5.5. 可以嵌套的ant元素

checkstyle任務中可以前臺以下元素: <filese>, <classpath>, <formatter> 以及<property>

formatter元素的屬性如 表 5.2 “formatter元素的屬性” 所示。

表 5.2. formatter元素的屬性
名字 描述 是否必須

type


結果的輸出方式,可用的值是:

plain :使用了 DefaultLogger

xml : 使用了XMLLogger

默認是 plain.




toFile


輸出到的文件。默認是標準輸出(控制檯)




useFile


是否把結果輸出到文件中。 true或false. 默認是"true"



第 6 章 在Eclipse中使用Checkstyle

目錄

6.1. 下載和安裝
6.2. 配置方法
6.3. 使用
6.4. 常見問題

6.1. 下載和安裝

下載在Checkstyle的 Checkstyle主頁 ,有一個插件列表。 截止到2008-02-26,Eclipse插件的可用的地址是:EclipseCS 和 Checkclipse

本節講解的是後者,也就是Checkclipse。

Checkclipse安裝的方法同其他的Eclipse插件一樣。不清楚的朋友可以看這篇文章:Eclipse基礎--使用links方式安裝Eclipse插件 。links方式 適用於Eclipse3.0, 3.1, 3.2 和 Europa
6.2. 配置方法

當Checkclipse成功安裝後,在"window->Preferences"中可以看到checkclipse的選項, 如 圖 6.1 “成功安裝Checkclipse後的Preferences窗口” 所示。
成功安裝Checkclipse後的Preferences窗口

圖 6.1. 成功安裝Checkclipse後的Preferences窗口

Checkclipse有兩個渠道可以進行配置,一個是全局的,一個是單個項目(Project)的。全局的可以在整個Eclipse的workbench中生效, 而單個項目的配置可以在指定的項目中生效,它優先於全局的配置。

對 於單個項目:右鍵點某個項目,然後選擇"Properties"就可以看到Checkclipse的窗口。在"Configuration"標籤 中,"Enable Checkstyle"一行前面打勾, 然後在"Checkstyle Configuration File:" 一行中選擇你的Checkstyle配置文件就可以了。

如 圖 6.2 “配置單個項目的Checkclipse” 所示。
配置單個項目的Checkclipse

圖 6.2. 配置單個項目的Checkclipse

對於全局的設置:"window->preferences"就可以看到。設置方法跟單個項目的設置是一樣的。

經 過上面的設置,Checkclipse就可以使用了。如果你想設置需要被檢查的文件名,那麼就在"File Filter"標籤中修改被包含的文件。可以使用"Add","Remove","Change"等按鈕進行編輯。 Included Resources 中顯示了被檢查的文件清單。

如 圖 6.3 “設置單個項目的Checkclipse的文件過濾器(file filter)” 所示。
設置單個項目的Checkclipse的文件過濾器(file filter)

圖 6.3. 設置單個項目的Checkclipse的文件過濾器(file filter)
[小心] 注意

除非很有必要,否則不要改FileFilter。使用默認的就滿足95%的情況。

官方幫助可以在Eclipse的"Help-> HelpeContents" 中的"Checkclipse - Checkstyle Plugin" 中找到。內容還是很詳盡的。
6.3. 使用

Checkclipse 的使用非常簡單,它的每次檢查是跟隨Eclipse的"Build Project"一起進行的。如果有錯誤,會顯示在"Problems"子窗口中。 另外,對於默認的檢查,錯誤是Warning級的,對於設置了配置文件後的檢查,錯誤都是Error級的。 看一下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章