PMD使用與程式碼質量
最近專案組要求使用PMD工具,透過自定義規則來檢查程式碼,接錄部分文件內容如下:
PMD介紹
PMD是一種開源分析Java程式碼錯誤的工具。與其他分析工具不同的是,PMD透過靜態分析獲知程式碼錯誤。也就是說,在不執行Java程式的情況下報告錯誤。PMD附帶了許多可以直接使用的規則,利用這些規則可以找出Java源程式的許多問題,例如:
® 潛在的bug:空的try/catch/finally/switch語句
® 未使用的程式碼:未使用的區域性變數、引數、私有方法等
® 可選的程式碼:String/StringBuffer的濫用
® 複雜的表示式:不必須的if語句、可以使用while迴圈完成的for迴圈
® 重複的程式碼:複製/貼上程式碼意味著複製/貼上bugs
® 迴圈體建立新物件:儘量不要再for或while迴圈體內例項化一個新物件
@ 資源關閉:Connect,Result,Statement等使用之後確保關閉掉
此外,使用者還可以自己定義規則,檢查Java程式碼是否符合某些特定的編碼規範。例如,你可以編寫一個規則,要求PMD找出所有建立Thread和Socket物件的操作。
安裝並從命令列執行PMD
你可以從PMD的網站下載PMD的二進位制版本,或下載帶原始碼的版本,下載得到的都是ZIP檔案。假設你下載了二進位制版本,先把它解壓縮到任意一個目錄。接下來怎麼做,就要看你準備怎麼用它——最簡單的,如果要在一個Java原始碼目錄中執行PMD,只需直接在命令列上執行下面的命令:
E:SoftWarepmd-bin-4.2.1pmd-4.2.1bin>java -jar ..libpmd-4.2.1.jar D:ebsser
viceebsservicesrc text rulesets/unusedcode.xml
輸出結果類如:
D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMPolicyInput.java:
51 Avoid unused private fields such as 'logger'.
D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMPolicyShow.java:2
5 Avoid unused private fields such as 'logger'.
D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMQueryPolicyByPoli
cyNo.java:32 Avoid unused local variables such as 'visaStatus'.
D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMQueryPolicyByPoli
cyNo.java:44 Avoid unused local variables such as 'temp'.
D:ebsserviceebsservicesrccomsinosoftservicepolicyebseriskESMPolicyInpu
t.java:28 Avoid unused private fields such as 'logger'.
D:ebsserviceebsservicesrccomsinosoftservicepolicyebsjriskJSMPolicyInpu
t.java:22 Avoid unused private fields such as 'logger'.
一些可以載入必須引數前面或者後面的可選引數如下:
-debug: 列印debug日誌資訊
-targetjdk: 指定目標原始碼的版本- 1.3, 1.4, 1.5, 1.6 or 1.7;
預設是1.5
-cpus: 指定建立的執行緒數
-encoding: 指定PMD檢查的程式碼的編碼方式
-excludemarker: 指定PMD需要忽略的行的標記,預設為NOPMD
-shortnames: 在報告中顯示縮短的檔名
-linkprefix: HTML原始檔的路徑,只是為了HTML顯示
-lineprefix: 自定義的錨,用於影響原始檔中的行,只是用於HTML顯示
-minimumpriority: 規則的優先順序限制,低於優先順序的規則將不被使用
-nojava: 不檢查java檔案,預設是檢查java檔案
-jsp: 檢查JSP/JSF檔案,預設不檢查
-reportfile: 將報告輸出到檔案,預設是列印在控制檯
-benchmark: 輸出一個基準清單,預設輸出到控制檯
-xslt: 覆蓋預設的xslt
-auxclasspath: 指定原始碼檔案使用的類路徑
例如在windows系統中,例子如下:
c:> java -jar pmd-4.2.1.jar c:mysourcecode text unusedcode,imports -targetjd
k 1.5 -debug
c:> java -jar pmd-4.2.1.jar c:mysourcecode xml basic,design -encoding UTF-8
c:> java -jar pmd-4.2.1.jar c:mysourcecode html typeresolution -auxclasspath
commons-collections.jar;derby.jar
在Eclipse中PMD外掛執行方式
PMD可以作為外掛整合到很多的IDE中,很多的外掛中都包含了PMD的jar檔案,這個jar檔案中包含了規則集。所以雖然一些外掛中使用rulesets/unusedcode.xml來作為引數引用規則集,但是實際上是使用getResourceAsStream()方法來從PMD的jar檔案中載入。
由於Eclipse是比較流行的開源Java/J2EE開發IDE,所以本文主要介紹如何在Eclipse中使用PMD工具進行程式碼的檢查
安裝基於 IDE的外掛
安裝Eclipse的PMD外掛的過程如下:
® 啟動Eclipse
® 選擇Help-->Software Updates-->Find and Install
® 選擇Next,選擇New remote site
® 在Name框中輸入PMD,URL框中輸入
® 在之後的對話方塊中一直點選下一步或者接受協議,完成Eclipse的PMD外掛的安裝
也可以透過下載的zip檔案按,然後執行上述過程,只是使用New locale site來代替New remote site,並使用下載的zip檔案。
可以透過Windows-->Preferences來配置PMD。
透過右鍵一個,然後選擇PMD-->Check node with PMD,即可使用PMD工具檢查程式碼。如果要進行重複程式碼檢測,那麼右鍵一個專案後,選擇PMD-->Find suspect cut and paste。檢查結果會放在reports目錄下,檔名為cpd-report.txt。
可以透過使用Eclipse的幫助系統來檢視PMD外掛的文件。
在安裝完更新後,如果發生了一個異常,例如”java.lang.RuntimeException: Could not find that class xxxx”,這時試著刪除workspace中的.metadata/plugins/net.sourceforge.pmd.eclipse目錄下的ruleset.xml檔案。
使用PMD
1、啟動Eclipse IDE,開啟工程,選擇 "Windows"->"Preferences"下的PMD項,其中Rules Configuration 專案可以配置PMD的檢查規則,自定義檢查規則也可以在此透過Import的方式匯入到PMD中
2、配置好後,滑鼠右鍵點選工程中需要檢查的JavaSource,選擇"PMD"->"Check Code With PMD" ,之後PMD就會透過規則檢查你的JavaSource了並且將資訊顯示在PMD自己的檢視上
3、示例
import java.util.*;
public class Test {
public static void main(String[] args) {
try{
if(true) {}
System.out.println("Hello World!");
} catch(Exception e) {
}
}
}
以上程式碼PMD會檢查出:catch塊中沒有內容、if判斷塊中沒有內容、程式碼中出現System.out.println等警告描述
[@more@]DM來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21327621/viewspace-1021158/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PMD外掛:你必須掌握的程式碼質量工具!
- 如何利用工具提高你的Android程式碼質量(Checkstyle、Findbugs、PMD)Android
- 程式碼與質量的思考與隨筆
- java靜態程式碼檢測-pmdJava
- 前端程式碼質量的思考與實踐前端
- 使用PyLint分析評估程式碼質量
- Sonar程式碼質量管理
- 程式碼質量管理-Sonar
- 使用Gradle做Java程式碼質量檢查GradleJava
- 前端程式碼質量管理(一)前端
- 如何做好質量管理、提高研發的程式碼質量?
- 前端程式碼質量優化交流前端優化
- 程式碼質量-開閉原則
- 提高程式碼質量-工具篇
- 【Sonar程式碼質量檢測工具】
- 提高php程式碼質量 36計PHP
- 何為程式碼質量?——用腦子寫程式碼
- 程式碼質量第 4 層 - 健壯的程式碼
- 程式碼質量第 2 層 - 可重用的程式碼
- 程式碼質量第 3 層 - 可讀的程式碼
- 隱性成本:程式碼質量與產品迭代的關係
- 質量與效率
- 萬字長文詳解如何使用Swift提高程式碼質量Swift
- 閒談團隊的程式碼質量
- 關於程式碼質量退化的思考
- android 程式碼質量檢查工具Android
- 高質量的程式碼 - 函式(1)函式
- 利用 ESLint 檢查程式碼質量EsLint
- 持續程式碼質量管理-Sonar部署
- 提高PHP程式碼質量的36計PHP
- CSS 程式碼靜態質量檢查CSS
- JavaScript 程式碼靜態質量檢查JavaScript
- 提高 PHP 程式碼質量的 36 計PHP
- 如何提高Java程式碼質量-優雅的寫程式碼Java
- 程式碼質量管理——如何寫出優雅的程式碼
- 程式碼質量與規範,那些年你欠下的技術債
- 在Java中使用函式正規化提高程式碼質量Java函式
- 《程式碼整潔之道》精華速覽,助你提升程式碼質量