プロジェクト間のCPD/PMD?
-
22-09-2019 - |
質問
願わくば、もう少し単純で理解しやすいものにするために、この質問を言い換えています。
単一の Web アプリケーションに含まれるコンポーネント (内部) が約 30 個あります。つまり、30 の異なるプロジェクトが独自の個別の POM を持つことになります。私は POM で継承を頻繁に使用しているため、POM が継承するものの 1 つは、コードの重複を防ぐための PMD/CPD 構成です。
CPD/PMD を実行しているにもかかわらず、同じプロジェクト内の重複コードのみが検出されます。リファクタリング可能なプロジェクト間で共有されているコードがあるかどうかを、私のプロジェクトのいずれかで検出したいと考えています。さらに、他のオープンソースの依存関係間でコードが共有されていないことを (同じ概念/パターンを使用して) 検証できるものを探していました。
ソース jar で動作することを除けば、CPD/PMD になります。すべてのプロジェクトとその依存関係の重複をスキャンすると、このタスクで大量のメモリが消費されます。現時点では、それを社内プロジェクトに適用したいと考えています。それが機能する場合は、スケールアウトするのが比較的簡単/簡単になります。
ウォルター
解決
すべてを手に入れたかどうかはわかりませんが...
すべてのプロジェクトを依存関係として含む集約モジュールを作成します。 maven-依存関係-プラグイン そしてそれは アンパック依存関係 mojo はすべての依存関係ソース jar を取得し (mojo は分類子をパラメーターとして受け取ることができます)、それらを解凍します (おそらく target/generated-sources/java
, 、 Maven ビルド ヘルパー プラグイン ここで役立つかもしれません)そして最後に実行します PMD:CPD ソースベース全体で。
これには多少の調整が必要かもしれませんが、私はこれをまったくテストしていません。
他のヒント
これが鳴ります。私は、PMDのために話すことはできません。私はあなたのプロジェクトの労働組合からのすべてのソースファイルを含む1つの巨大なプロジェクトを作ってそれを伝えると仮定します。しかし、はい、これはRAMとCPUの多くを取るでしょう。
ないもう1つのツールは、のJava CloneDR のです。 CloneDRにかかわらず、ソースコードのレイアウトまたは介在コメントは、それが正確に同じ又は近い(例えば、少数の編集)であるか否かを重複コードを見出します。それは、プロジェクトのあなたのセット内のすべてのファイルを処理するためにそれを設定することはとても簡単です。
走PMD:"CPD単体のプログラム。を加えるだけで動作します。ディレクトリでrecurse.少なくとも、そうです。っていて、私のソースをディレクトリと走りの"CPD guiからのバッチファイル配布または弊-4.2.5.
あなたはおそらくソナーのを見てみることができます:
はるかにスケーラブルで、クロスプロジェクトの重複を検出することができます。ソナー-CPDエンジンます。