2

うまくいけば、この質問をもう少しわかりやすく、理解しやすいものにするために言い換えています。

単一のWebアプリケーションに組み込まれる約30個のコンポーネント(内部)があります。つまり、独自の個別のPOMを持つ30の異なるプロジェクトを意味します。私はPOMで継承をかなり使用しているので、継承するものの1つは、コードの重複を防ぐためのPMD/CPD構成です。

CPD / PMDを実行していますが、同じプロジェクト内の重複コードのみが検出されます。リファクタリングできるプロジェクト間で共有されているコードがあるかどうかを、私のプロジェクトのいずれかで検出したいと思います。さらに、(同じ概念/パターンを使用して)他のオープンソースの依存関係間でコードが共有されていないことを確認できるものを探していました。

ソースjarで動作することを除いて、CPD/PMDになります。すべてのプロジェクトとその依存関係をスキャンして重複を確認すると、このタスクは大量のメモリを消費します。今は、それを社内プロジェクトに適用したいと思います。それが機能する場合、それをスケールアウトすることは比較的簡単/簡単です。

ウォルター

4

5 に答える 5

2

私はすべてを手に入れたかどうかはわかりませんが...

すべてのプロジェクトを依存関係として持つ集約モジュールを作成し、maven-dependency-pluginを使用します。unpack - dependenciesmojoを使用して、すべての依存関係ソースjar(mojoはパラメーターとして分類子を取得できます)を取得し、それらを解凍します(おそらくtarget/generated-sources/javamavenビルドヘルパープラグインがここで役立つ場合があります)そして最後にソースベース全体でpmd:cpdを実行します。

これには微調整が必​​要かもしれませんが、私はこれをまったくテストしませんでした。

于 2010-01-12T00:48:29.093 に答える
1

30のプロジェクトのどこかで重複コードを見つけたいようです。PMDについて話すことはできません。プロジェクトの結合からのすべてのソースファイルを含む1つの巨大なプロジェクトを作成するように指示したと思います。しかし、はい、これには多くのRAMとCPUが必要になります。

そのためのもう1つのツールは、JavaCloneDRです。CloneDRは、ソースコードのレイアウトや介在するコメントに関係なく、完全に同じであるか近いか(たとえば、いくつかの編集)、重複するコードを検出します。プロジェクトのセット内のすべてのファイルを処理するように設定するのは非常に簡単です。

于 2010-01-12T00:10:15.677 に答える
0

PMD:CPDをスタンドアロンプ​​ログラムとして実行するだけです。必要なのはディレクトリだけで、それは繰り返されます。少なくとも、それは私にとってはうまくいきました。すべてのソースを1つのディレクトリに移動し、PMD-4.2.5で配布されたバッチファイルからCPDGUIを実行しました。

于 2010-06-15T16:57:08.807 に答える
0

あなたはおそらくソナーを見ることができます:

Sonar-はるかにスケーラブルで、プロジェクト間の重複を検出できるCPDエンジン。

于 2013-03-21T10:07:47.527 に答える
-1

LizardforPythonを試すことができます。ただし、ソースjarでは機能しません。

"Code Duplicate Detector lizard-Eduplicate{コードへのパス}"

https://pypi.org/project/lizard/

PMD / CPDは、コードのブロックに重複のフラグが立てられる前にユーザーがトークンの数を指定できるため、より細分性を提供します。

https://pmd.github.io/latest/pmd_userdocs_cpd.html#cli-options-reference

于 2020-01-03T05:21:53.043 に答える