PMDの概要
1. 概要
簡単に言えば、PMDは、未使用の変数、空のcatchブロック、不要なオブジェクトの作成など、一般的なプログラミングの欠陥を見つけるためのソースコードアナライザーです。
Java、JavaScript、Salesforce.com Apex、PLSQL、Apache Velocity、XML、XSLをサポートしています。
この記事では、PMDを使用してJavaプロジェクトで静的分析を実行する方法に焦点を当てます。
2. 前提条件
PMDをMavenプロジェクトにセットアップすることから始めましょう–maven-pmd-pluginを使用して構成します。
...
org.apache.maven.plugins
maven-pmd-plugin
3.7
/rulesets/java/braces.xml
/rulesets/java/naming.xml
maven-pmd-pluginhereの最新バージョンを見つけることができます。
ここで構成にルールセットを追加していることに注目してください。これらは、PMDコアライブラリからすでにルールを定義するための相対パスです。
最後に、すべてを実行する前に、いくつかの明白な問題を含む単純なJavaクラスを作成しましょう。これは、PMDが問題の報告を開始できるものです。
public class Ct {
public int d(int a, int b) {
if (b == 0)
return Integer.MAX_VALUE;
else
return a / b;
}
}
3. PMDを実行する
簡単なPMD構成とサンプルコードを使用して、ビルドターゲットフォルダーにレポートを生成しましょう。
mvn site
生成されたレポートはpmd.htmlと呼ばれ、target/siteフォルダーにあります。
Files com/example/pmd/Cnt.java Violation Line Avoid short class names like Cnt 1–10 Avoid using short method names 3 Avoid variables with short names like b 3 Avoid variables with short names like a 3 Avoid using if...else statements without curly braces 5 Avoid using if...else statements without curly braces 7
As you can see – we’re not getting results.レポートには、PMDによると、Javaコードの違反と行番号が表示されます。
4. ルールセット
PMDプラグインは、5つのデフォルトルールセットを使用します。
-
basic.xml
-
empty.xml
-
imports.xml
-
unnecessary.xml
-
unusedcode.xml
他のルールセットを使用するか、独自のルールセットを作成して、プラグインでこれらを設定できます。
...
org.apache.maven.plugins
maven-pmd-plugin
3.7
/rulesets/java/braces.xml
/rulesets/java/naming.xml
/usr/pmd/rulesets/strings.xml
http://localhost/design.xml
構成の「ルールセット」値の値として、相対アドレス、絶対アドレス、またはURLのいずれかを使用していることに注意してください。
プロジェクトに使用するルールをカスタマイズするためのクリーンな戦略は、write a custom ruleset fileです。 このファイルでは、使用するルールを定義し、カスタムルールを追加し、公式ルールセットに含める/除外するルールをカスタマイズできます。
5. カスタムルールセット
次に、PMDの既存のルールセットから使用する特定のルールを選択し、それらをカスタマイズしてみましょう。
まず、新しいruleset.xmlファイルを作成します。 もちろん、既存のルールセットファイルの1つを例として使用し、それをコピーして新しいファイルに貼り付け、そこから古いルールをすべて削除し、名前と説明を変更できます。
This ruleset checks my code for bad stuff
次に、いくつかのルール参照を追加しましょう。
または、いくつかの特定のルールを追加します。
ルールのメッセージと優先度をカスタマイズできます。
2
また、次のようにルールのプロパティ値をカスタマイズすることもできます。
個々の参照ルールをカスタマイズできることに注意してください。 ルールのクラス以外はすべて、カスタムルールセットでオーバーライドできます。
次に、ルールセットからルールを除外することもできます。
Next – you can also exclude files from a rulesetは除外パターンを使用し、オプションで包含パターンをオーバーライドします。
一致する除外パターンがあるが、一致する包含パターンがない場合、ファイルは処理から除外されます。
ソースファイルパスのパス区切り文字は「/」文字に正規化されているため、複数のプラットフォームで同じルールセットを透過的に使用できます。
さらに、このexclude / includeテクニックは、PMDの使用方法に関係なく機能します(例: コマンドライン、IDE、Ant)、環境全体で一貫したPMDルールの適用を維持しやすくします。
以下に簡単な例を示します。
My ruleset
.*/some/package/.*
.*/some/other/package/FunkyClassNamePrefix.*
.*/some/package/ButNotThisClass.*
...
6. 結論
この簡単な記事では、Javaコードの静的分析に焦点を合わせた柔軟で高度に構成可能なツールであるPMDを紹介しました。
いつものように、このチュートリアルで提示される完全なコードはover on Githubで利用できます。