<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    爪哇一角

    共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
    posts - 3, comments - 6, trackbacks - 0, articles - 99
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    CheckStyle使用手冊(轉載)

    Posted on 2011-11-01 15:54 非洲小白臉 閱讀(1035) 評論(0)  編輯  收藏 所屬分類: 項目管理
    介紹
    CheckStyle是SourceForge下的一個項目,提供了一個幫助JAVA開發人員遵守某些編碼規范的工具。它能夠自動化代碼規范檢查過程,從 而使得開發人員從這項重要,但是枯燥的任務中解脫出來。
    CheckStyle默認提供一下主要檢查內容:
      •Javadoc注釋
      •命名約定
      •標題
      •Import語句
      •體積大小
      •空白
      •修飾符
       •塊
      •代碼問題
      •類設計
      •混合檢查(包活一些有用的比如非必須的 System.out和printstackTrace)
      從上面可以看出,CheckStyle提供了大部分功能都是對于代碼規范 的檢查,而沒有提供象PMD和Jalopy那么多的增強代碼質量和修改代碼的功能。但是,對于團隊開發,尤其是強調代碼規范的公司來說,它的功能已經足夠強大。
    Eclipse插件安裝和使用
    步驟一:http://sourceforge.net/projects/checkclipse/下載checkstyle的eclipse插件checkclipse。下載后,將包放入eclipse的plugins文件夾下,然后重啟eclipse。在Windows—>preferences下找到checkclipse。如下圖:

    勾選Set Project Dir as Checkjstyle Basedir
    步驟二:右鍵選中你要進行checkstyle的項目文件,選擇“properties”。如下圖:

    勾選Enable Checkstyle和Set Project ClassLoader.
    然后再Checkstyle Configuraion File中選擇項目中checkstyle的配置文件。這里我把配置文件時放置在項目根目錄下,所以點擊右側“Browse”按鈕,在項目根目錄下選擇該文件。按“OK”按鈕。
    這樣整個項目的代碼將根據配置文件中設置的原則進行出錯提示.結果如下圖:

    由圖可知對不符合代碼規范的代碼會有錯誤提示,并且有提示信息。
    Maven插件安裝和使用
    首先,修改要檢查代碼庫top級的pom.xml文件,在build部分配置CheckStyle的Maven插件,以便于下載安裝對應版本的插件(Maven會自動從其鏡像庫中下載),方法如下:
    Java代碼 復制代碼 收藏代碼
    1. <project>   
    2.   ...   
    3.   <build>   
    4.     <plugins>   
    5.       <plugin>   
    6.         <groupId>org.apache.maven.plugins</groupId>   
    7.         <artifactId>maven-checkstyle-plugin</artifactId>   
    8.         <version>2.3</version>   
    9.       </plugin>   
    10.     </plugins>   
    11.   </build>   
    12.   ...   
    13. </project>  

    maven-checkstyle-plugin的最新版本為2.5,其對應的CheckStyle核心版本為5.0;maven-checkstyle-plugin 2.3對應的CheckStyle核心版本為4.4。查看插件的pom文件,可看到如下內容,其中的版本號就為對應的CheckStyle的版本號。
    Java代碼 復制代碼 收藏代碼
    1. <dependency>   
    2.   <groupId>checkstyle</groupId>    
    3.   <artifactId>checkstyle</artifactId>    
    4.   <version>4.4</version>    
    5.   </dependency>  

    接下來,將自定義的規則配置文件拷貝到top級目錄,在reporting部分的CheckStyle插件配置中引用配置。
    Java代碼 復制代碼 收藏代碼
    1. <reporting>   
    2.     <plugins>   
    3.         <plugin>   
    4.             <groupId>org.apache.maven.plugins</groupId>   
    5.             <artifactId>maven-checkstyle-plugin</artifactId>   
    6.             <configuration>   
    7.               <configLocation>my_checks.xml</configLocation>   
    8.             </configuration>   
    9.         </plugin>   
    10.     </plugins>   
    11. </reporting>  

    也可以將配置文件放在子文件夾下,配置中帶上相對路徑即可。
    Java代碼 復制代碼 收藏代碼
    1. <reporting>   
    2.     <plugins>   
    3.         <plugin>   
    4.             <groupId>org.apache.maven.plugins</groupId>   
    5.             <artifactId>maven-checkstyle-plugin</artifactId>   
    6.             <configuration>   
    7.               <configLocation>build-tools/src/main/resources/xx/my_checks.xml</configLocation>   
    8.             </configuration>   
    9.         </plugin>   
    10.     </plugins>   
    11. </reporting>  

    如果使用插件自帶的規則文件,可以作如下配置。maven-checkstyle-plugin插件自帶的規則有sun_checks.xml、maven_checks.xml等,可查看插件包。
    Java代碼 復制代碼 收藏代碼
    1. <reporting>   
    2.     <plugins>   
    3.                <plugin>   
    4.                  <groupId>org.apache.maven.plugins</groupId>   
    5.                  <artifactId>maven-checkstyle-plugin</artifactId>   
    6.                  <configuration>   
    7.                             <configLocation>config/maven_checks.xml</configLocation>   
    8.                 </configuration>   
    9.                  <version>2.3</version>          
    10.                </plugin>   
    11.     </plugins>   
    12. </reporting>  

    在reporting部分增加jxr插件,生成代碼報告,這樣在CheckStyle報告 中點擊問題對應的鏈接就可以直接看到出錯的代碼。
         
    Java代碼 復制代碼 收藏代碼
    1. <reporting>   
    2.           <plugins>   
    3.             <plugin>   
    4.               <groupId>org.apache.maven.plugins</groupId>   
    5.               <artifactId>maven-checkstyle-plugin</artifactId>   
    6.               <configuration>   
    7.                          <configLocation>my_checks.xml</configLocation>                               
    8.           </configuration>   
    9.               <version>2.3</version>          
    10.             </plugin>   
    11.             <plugin>   
    12.                    <groupId>org.apache.maven.plugins</groupId>   
    13.                  <artifactId>maven-jxr-plugin</artifactId>   
    14.             </plugin>                 
    15.           </plugins>   
    16.     </reporting>   
              
    在build和reporting部分增加javadoc插件,如果pom文件中已經配置,則只需作相應修改。charset、encoding、docencoding配置用于解決生成的javadoc文件中文亂碼問題;aggregate配置為true則javadoc報告會集中顯示所有子模塊的javadoc。
           
    Java代碼 復制代碼 收藏代碼
    1. <reporting>   
    2.             <plugins>   
    3.               <plugin>   
    4.                           <groupId>org.apache.maven.plugins</groupId>   
    5.                           <artifactId>maven-javadoc-plugin</artifactId>   
    6.                           <version>2.4</version>   
    7.                           <configuration>   
    8.                              <aggregate>true</aggregate>   
    9.                         <charset>UTF-8</charset>   
    10.                                       <encoding>UTF-8</encoding>   
    11.                                       <docencoding>UTF-8</docencoding>   
    12.                         </configuration>   
    13.               </plugin>               
    14.               <plugin>   
    15.                 <groupId>org.apache.maven.plugins</groupId>   
    16.                 <artifactId>maven-checkstyle-plugin</artifactId>   
    17.                 <configuration>   
    18.                            <configLocation>my_checks.xml</configLocation>                               
    19.             </configuration>   
    20.                 <version>2.3</version>          
    21.               </plugin>   
    22.               <plugin>   
    23.                      <groupId>org.apache.maven.plugins</groupId>   
    24.                    <artifactId>maven-jxr-plugin</artifactId>   
    25.               </plugin>                 
    26.             </plugins>   
    27.       </reporting>  

    在maven插件中使用 install命令將pom文件中配置的插件下載安裝到本地,然后使用checkstyle:checkstyle命令進行檢查并生成報告,運行完畢,各項目目錄下會生成target目錄,target\site\checkstyle.html即為該項目的問題報告。
    需要注意的是checkstyle:checkstyle僅生成CheckStyle相關報告,因此不能從報告中直接鏈接到錯誤代碼;需要同時生成jxr源代碼,使用site。
    如果運行checkstyle:checkstyle或site過程中出現如下錯誤,則應該修改CheckStyle規 則配置文件,去除其中的中文字符。
    Java代碼 復制代碼 收藏代碼
    1. “[ERROR] BUILD ERROR   
    2. [INFO] ------------------------------------------------------------------------   
    3. [INFO] An error has occurred in Checkstyle report generation.   
    4.     
    5. Embedded error: Failed during checkstyle configuration   
    6. Invalid byte 1 of 1-byte UTF-8 sequence.   
    7. ”  

    最佳實踐
    自定義的checkstyle配置文件
      以下代碼是自定義的checkstyle配置文件內容,相關說明都已經用注釋形式寫在文件中。代碼如下:
    Java代碼 復制代碼 收藏代碼
    1. <!DOCTYPE module PUBLIC   
    2.     "-//Puppy Crawl//DTD Check Configuration 1.2//EN"  
    3.     "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">   
    4. <module name="Checker">   
    5.   
    6.     <!--   
    7.         重復代碼的檢查,超過8行就認為重復,UTF-8格式 本檢查一定要放在"TreeWalker"節點前,否則在   
    8.         Checkclipse中會無法使用。(在ant下可以)   
    9.     -->   
    10.     <module name="StrictDuplicateCode">   
    11.         <property name="min" value="8" />   
    12.         <property name="charset" value="UTF-8" />   
    13.     </module>   
    14.   
    15.     <module name="TreeWalker">   
    16.   
    17.         <!-- javadoc的檢查 -->   
    18.         <!-- 檢查所有的interfaceclass -->   
    19.         <module name="JavadocType" />   
    20.   
    21.         <!-- 命名方面的檢查,它們都使用了Sun官方定的規則。 -->   
    22.         <!-- 局部的final變量,包括catch中的參數的檢查 -->   
    23.         <module name="LocalFinalVariableName" />   
    24.         <!-- 局部的非final型的變量,包括catch中的參數的檢查 -->   
    25.         <module name="LocalVariableName" />   
    26.         <!-- 包名的檢查(只允許小寫字母) -->   
    27.         <module name="PackageName">   
    28.             <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" />   
    29.         </module>   
    30.         <!-- 僅僅是static型的變量(不包括static final型)的檢查 -->   
    31.         <module name="StaticVariableName" />   
    32.         <!-- 類型(Class或Interface)名的檢查 -->   
    33.         <module name="TypeName" />   
    34.         <!-- 非static型變量的檢查 -->   
    35.         <module name="MemberName" />   
    36.         <!-- 方法名的檢查 -->   
    37.         <module name="MethodName" />   
    38.         <!-- 方法的參數名 -->   
    39.         <module name="ParameterName " />   
    40.         <!-- 常量名的檢查 -->   
    41.         <module name="ConstantName" />   
    42.   
    43.         <!-- import方面的檢查 -->   
    44.         <!-- import中避免星號"*" -->   
    45.         <module name="AvoidStarImport" />   
    46.         <!--   
    47.             沒用的import檢查,比如:1.沒有被用到2.重復的3.import java.lang的4.import  
    48.             與該類在同一個package的   
    49.         -->   
    50.         <module name="UnusedImports" />   
    51.   
    52.   
    53.         <!-- 長度方面的檢查 -->   
    54.         <!-- 文件長度不超過1500行 -->   
    55.         <module name="FileLength">   
    56.             <property name="max" value="1500" />   
    57.         </module>   
    58.         <!-- 每行不超過120個字-->   
    59.         <module name="LineLength">   
    60.             <property name="max" value="120" />   
    61.         </module>   
    62.         <!-- 方法不超過30行 -->   
    63.         <module name="MethodLength">   
    64.             <property name="tokens" value="METHOD_DEF" />   
    65.             <property name="max" value="30" />   
    66.         </module>   
    67.         <!-- 方法的參數個數不超過3個。 并且不對構造方法進行檢查-->   
    68.         <module name="ParameterNumber">   
    69.             <property name="max" value="3" />   
    70.             <property name="tokens" value="METHOD_DEF" />   
    71.         </module>   
    72.   
    73.         <!-- 空格檢查  -->   
    74.         <!-- 允許方法名后緊跟左邊圓括號"(" -->   
    75.         <module name="MethodParamPad" />   
    76.         <!-- 在類型轉換時,不允許左圓括號右邊有空格,也不允許與右圓括號左邊有空格 -->   
    77.         <module name="TypecastParenPad" />   
    78.         <!-- 不允許使用"tab"鍵  -->   
    79.         <module name="TabCharacter" />   
    80.   
    81.         <!-- 關鍵字 -->   
    82.         <!--   
    83.             每個關鍵字都有正確的出現順序。比如 public static final XXX 是對一個常量的聲明。如果使用 static  
    84.             public final 就是錯誤的   
    85.         -->   
    86.         <module name="ModifierOrder" />   
    87.         <!-- 多余的關鍵字 -->   
    88.         <module name="RedundantModifier" />   
    89.   
    90.         <!-- 對區域的檢查 -->   
    91.         <!-- 不能出現空白區域 -->   
    92.         <module name="EmptyBlock" />   
    93.         <!-- 所有區域都要使用大括號。 -->   
    94.         <module name="NeedBraces" />   
    95.         <!-- 多余的括號 -->   
    96.         <module name="AvoidNestedBlocks">   
    97.             <property name="allowInSwitchCase" value="true" />   
    98.         </module>   
    99.   
    100.         <!-- 編碼方面的檢查 -->   
    101.         <!-- 不許出現空語句 -->   
    102.         <module name="EmptyStatement" />   
    103.         <!-- 每個類都實現了equals()和hashCode() -->   
    104.         <module name="EqualsHashCode" />   
    105.         <!-- 不許使用switch,"a++"這樣可讀性很差的代碼 -->   
    106.         <module name="IllegalToken" />   
    107.         <!-- 不許內部賦值 -->   
    108.         <module name="InnerAssignment" />   
    109.         <!-- 絕對不能容忍魔法數 -->   
    110.         <module name="MagicNumber">   
    111.             <property name="tokens" value="NUM_DOUBLE, NUM_INT" />   
    112.         </module>   
    113.         <!-- 循環控制變量不能被修改 -->   
    114.         <module name="ModifiedControlVariable" />   
    115.         <!-- 多余的throw -->   
    116.         <module name="RedundantThrows" />   
    117.         <!-- 不許使用未被簡化的條件表達式 -->   
    118.         <module name="SimplifyBooleanExpression" />   
    119.         <!-- 不許使用未被簡化的布爾返回值 -->   
    120.         <module name="SimplifyBooleanReturn" />   
    121.         <!-- String的比較不能用!= 和 == -->   
    122.         <module name="StringLiteralEquality" />   
    123.         <!-- if最多嵌套3層 -->   
    124.         <module name="NestedIfDepth">   
    125.             <property name="max" value="3" />   
    126.         </module>   
    127.         <!-- try最多被嵌套2層 -->   
    128.         <module name="NestedTryDepth">   
    129.             <property name="max" value="2" />   
    130.         </module>   
    131.         <!-- clone方法必須調用了super.clone() -->   
    132.         <module name="SuperClone" />   
    133.         <!-- finalize 必須調用了super.finalize() -->   
    134.         <module name="SuperFinalize" />   
    135.         <!-- 不能catch java.lang.Exception -->   
    136.         <module name="IllegalCatch">   
    137.             <property name="illegalClassNames" value="java.lang.Exception" />   
    138.         </module>   
    139.         <!-- 確保一個類有package聲明 -->   
    140.         <module name="PackageDeclaration" />   
    141.         <!-- 一個方法中最多有3return -->   
    142.         <module name="ReturnCount">   
    143.             <property name="max" value="3" />   
    144.             <property name="format" value="^$" />   
    145.         </module>   
    146.         <!--   
    147.             根據 Sun 編碼規范, class 或 interface 中的順序如下: 1.class 聲明。首先是 public,   
    148.             然后是protected , 然后是 package level (不包括access modifier ) 最后是private .   
    149.             (多個class放在一個java文件中的情況) 2.變量聲明。 首先是 public, 然后是protected然后是 package  
    150.             level (不包括access modifier ) 最后是private . (多個class放在一個java文件中的情況)   
    151.             3.構造函數 4.方法   
    152.         -->   
    153.         <module name="DeclarationOrder" />   
    154.         <!-- 不許對方法的參數賦值 -->   
    155.         <module name="ParameterAssignment" />   
    156.         <!-- 確保某個class 在被使用時都已經被初始化成默認值(對象是null,數字和字符是0,boolean 變量是false.) -->   
    157.         <module name="ExplicitInitialization" />   
    158.         <!-- 不許有同樣內容的String -->   
    159.         <module name="MultipleStringLiterals" />   
    160.         <!-- 同一行不能有多個聲明 -->   
    161.         <module name="MultipleVariableDeclarations" />   
    162.         <!-- 不必要的圓括號 -->   
    163.         <module name="UnnecessaryParentheses" />   
    164.   
    165.         <!-- 各種量度 -->   
    166.         <!-- 布爾表達式的復雜度,不超過3 -->   
    167.         <module name="BooleanExpressionComplexity" />   
    168.         <!-- 類數據的抽象耦合,不超過7 -->   
    169.         <module name="ClassDataAbstractionCoupling" />   
    170.         <!-- 類的分散復雜度,不超過20 -->   
    171.         <module name="ClassFanOutComplexity" />   
    172.         <!-- 函數的分支復雜度,不超過10 -->   
    173.         <module name="CyclomaticComplexity" />   
    174.         <!-- NPath復雜度,不超過200 -->   
    175.         <module name="NPathComplexity" />   
    176.   
    177.         <!-- 雜項 -->   
    178.         <!-- 禁止使用System.out.println -->   
    179.         <module name="GenericIllegalRegexp">   
    180.             <property name="format" value="System\.out\.println" />   
    181.             <property name="ignoreComments" value="true" />   
    182.         </module>   
    183.            
    184.         <!-- 不許使用main方法 -->   
    185.         <module name="UncommentedMain" />   
    186.         <!-- 檢查并確保所有的常量中的L都是大寫的。因為小寫的字母l跟數字1太象了 -->   
    187.         <module name="UpperEll" />   
    188.         <!-- 檢查數組類型的定義是String[] args,而不是String args[] -->   
    189.         <module name="ArrayTypeStyle" />   
    190.         <!--   
    191.             檢查java代碼的縮進 默認配置:基本縮進 4個空格,新行的大括號:0。新行的case 4個空格。   
    192.         -->   
    193.         <module name="Indentation" />   
    194.     </module>   
    195.   
    196.     <!-- 檢查翻譯文件     -->   
    197.     <module name="Translation" />   
    198. </module>  

    CheckStyle應用的最佳實踐
      采用CheckStyle以后,編碼規范的檢查就變得及其簡單,可以作為一項切實可行的實踐加以執行。
      一般情況下,在項目小組中引入CheckStyle可以按照下面的步驟進行:
      1. 強調Code Review與Code Conventions的重要作用;
      2. 介紹CheckStyle;
        3. 初步應用CheckStyle:參照CheckStyle附帶的配置文件,酌情加以剪裁,在項目的Maven配置文件中,添加CheckStyle任務,可以 單獨執行;
      4. 修改、定型CheckStyle的配置文件:按照基本配置文件執行一段時間(2~3周),聽取開發人員的反饋意見,修改配置信息;
      5. 作為開發過程的日常實踐,強制執行CheckStyle:穩定CheckStyle的配置信息,同時將CheckStyle任務作為Build的依賴任務 或者配置SCM(目前,CheckStyle可以與SVN有效集成),使得代碼在加入系統 之前必須通過檢查。
      同時需要指出的是,CheckStyle的有效執行需要依賴的條件:
        •IDE Format Code的強大功能:由于CheckStyle本身并沒有提供很強大的Code Format等功能,因此,需要借助IDE的幫助,從而使得在發生錯誤的時候,可以很容易的進行修復。
    IDE格式配置使用介紹
    在eclipse中的window?preferences?java?code style中可以導入自定義的java編碼風格文件。如下圖:

    點擊“Clean Up”,在右側可以看見一個Import按鈕,導入自定義的cleanup文件,點擊“OK”即可。左側的“Formatter”也是如法炮制。具體自定義的checkstyle,cleanup,formatter文件可參考壓縮包文件中的公司代碼規范文件夾。

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产精品亚洲小说专区| 国产伦精品一区二区免费| 国产色爽女小说免费看| fc2免费人成为视频| 中文字幕在线观看亚洲日韩| 永久黄网站色视频免费观看| 久久久久女教师免费一区| 亚洲精品国产成人| 日韩亚洲国产综合久久久| 一级毛片在线观看免费| 亚洲av成人片在线观看| 亚洲四虎永久在线播放| 九九久久国产精品免费热6 | 大学生a级毛片免费观看 | 在线美女免费观看网站h| 亚洲中文无码永久免| 亚洲一区爱区精品无码| 成年人免费观看视频网站| 丁香花在线观看免费观看图片| 亚洲国产a级视频| 182tv免费观看在线视频| 免费一区二区三区在线视频| 国产精品冒白浆免费视频| 免费黄网站在线看| 人人爽人人爽人人片A免费| 亚洲国产成人手机在线电影bd| 在线日韩日本国产亚洲| 我要看WWW免费看插插视频| 免费人妻无码不卡中文字幕系| 春意影院午夜爽爽爽免费| 亚洲香蕉久久一区二区三区四区| 亚洲乱码无码永久不卡在线| 精品久久久久久久免费人妻| 亚洲黄色免费电影| 久久青草免费91观看| 亚洲人妖女同在线播放| 久久精品国产69国产精品亚洲| 91精品免费高清在线| 久久久久久av无码免费看大片 | 亚洲免费一级视频| 亚洲1234区乱码|