Java > PMDの使い方
更新日
2012-09-23
広告
PMDはソースコードの解析ツールです。FindBugsと似ていますが、PMDはソースコードを解析します(FindBugsはコンパイルされた .class を解析します)。
以下の説明では、サンプルファイル PmdTest.java をPMDで解析します。
package sample; public class PmdTest { private String id = "134"; public void testMethod() { if (true) { System.out.println("true"); } else { } } }
PMDをコマンドラインから使う
PMDをダウンロードして、適当な場所に解凍します。解凍すると、binディレクトリがあると思います。$ ls pmd-bin-5.0.0/ LICENSE.txt bin docs etc libPMDをコマンドラインから使うためには、binディレクトリの中のrun.shを使います。
$ ./pmd-bin-5.0.0/bin/run.sh pmd sample/PmdTest.java text java-basic,java-design sample/PmdTest.java:5 Private field 'id' could be made final; it is only initialized in the declaration or constructor. sample/PmdTest.java:8 Do not use if statements that are always true or always false sample/PmdTest.java:10 Avoid empty if statements
「インスタンス変数idは、finalにできますよ」とか、「常にtrueになるような式を、if文の判定式に使ってはいけませんよ」とか、指摘してくれています。
以下、コマンドラインの引数の説明です。
- pmd : おまじないだと思って指定してください。
- sample/PmdTest.java : 解析対象のファイル
- text : 解析結果の出力形式。textの他に'xml'や'html'などがあります。
- java-basic,java-design : 解析の際に利用するルール群。カンマで複数指定します。ルール一覧は公式サイトをご覧ください。
PMDをantから使う
PMDをantから実行する場合は例えば以下のようにbuild.xmlを記述します。<project name="pmd-test" default="pmd" basedir="."> <!-- PMDのライブラリに対するクラスパス設定 --> <path id="pmd.lib"> <fileset dir="pmd-bin-5.0.0/lib/"> <include name="*.jar"/> </fileset> </path> <target name="pmd"> <taskdef name="pmd" classpathref="pmd.lib" classname="net.sourceforge.pmd.ant.PMDTask"/> <pmd shortFilenames="true"> <!-- 解析に使用するルールを指定 --> <ruleset>rulesets/java/design.xml</ruleset> <ruleset>java-basic</ruleset> <!-- 解析結果の出力フォーマットと出力ファイルを指定 --> <formatter type="text" toFile="pmd-result.html"/> <!-- 解析対象を指定 --> <fileset dir="sample"> <include name="*.java"/> </fileset> </pmd> </target> </project>antを実行します。
$ ant pmdpmd-result.htmlは以下のようになります。
$ cat pmd-result.html PmdTest.java:5 Private field 'id' could be made final; it is only initialized in the declaration or constructor. PmdTest.java:8 Do not use if statements that are always true or always false PmdTest.java:10 Avoid empty if statementsルールの設定は、コマンドラインのときと同様に、'java-design'や'java-basic'などと指定してもよいです。
<pmd shortFilenames="true"> <!-- <ruleset>rulesets/java/design.xml</ruleset> --> <ruleset>java-design</ruleset> <ruleset>java-basic</ruleset> <formatter type="text" toFile="pmd-result.html"/> <fileset dir="sample"> <include name="*.java"/> </fileset> </pmd>
広告
お問い合わせは sweng.tips@gmail.com まで。