

PMD は拡張可能な多言語対応静的コード解析ツールです。未使用変数、空の catch ブロック、不要なオブジェクト生成といった一般的なプログラミングの欠陥を検出します。主に Java と Apex を対象としていますが、他の16言語もサポートしています。400以上の組み込みルールが付属しており、カスタムルールで拡張することもできます。JavaCC と Antlr を使用してソースファイルを抽象構文木 (AST) に解析し、ルールを適用して違反を見つけます。ルールは Java または XPath クエリで記述できます。
現在、PMD は Java、JavaScript、Salesforce.com の Apex と Visualforce、Kotlin、Swift、Modelica、PL/SQL、Apache Velocity、JSP、WSDL、Maven POM、HTML、XML、XSL をサポートしています。Scala もサポートされていますが、現時点では Scala 用のルールはありません。
さらに、CPD(コピーペースト検出器)も含まれています。CPD は以下の言語での重複コードを検出します:Coco、C/C++、C#、CSS、Dart、Fortran、Gherkin、Go、Groovy、HTML、Java、JavaScript、JSP、Julia、Kotlin、Lua、Matlab、Modelica、Objective-C、Perl、PHP、PL/SQL、Python、Ruby、Salesforce.com の Apex と Visualforce、Scala、Swift、T-SQL、TypeScript、Apache Velocity、WSDL、XML、XSL。
リリースページから最新のバイナリ zip をダウンロードし、適当な場所に展開します。
bin/pmd check または bin\pmd.bat check を実行します。
はじめにもご覧ください。
デモ:
以下は PMD が openjdk を解析する様子です:

Maven や Gradle 用のプラグイン、および各種 IDE 用のプラグインもあります。 ツール/統合をご覧ください。
プルリクエストは歓迎します。大きな変更については、まず issue を開いて変更内容を議論してください。
PMD の最新ソースは GitHub にあります。フォークしてください!
詳細は PMD への貢献方法 をご覧ください。
ルールデザイナーは pmd/pmd-designer で開発されています。 開発者向けドキュメントは その README を参照してください。
財政的支援者になり、コミュニティの持続を支援してください。貢献する
このプロジェクトは all-contributors 仕様に従っています。あらゆる種類の貢献を歓迎します!
完全なリストは credits を参照してください。