

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 にあります。フォークしてください!
詳細は How to contribute to PMD をご覧ください。
ルールデザイナーは pmd/pmd-designer で開発されています。 開発者向けドキュメントは その README をご覧ください。
資金提供コントリビューターになり、私たちのコミュニティの維持にご協力ください。Contribute
このプロジェクトは all-contributors 仕様に従っています。 あらゆる種類のコントリビューションを歓迎します!
完全なリストは credits をご覧ください。