40

検出された「パッケージ間サイクル」に関与する特定のクラスを明示的にリストすることが目標であることを知っている場合、Java パッケージの循環依存関係を検出するためにどのツールをお勧めしますか?

classycleJDependについては知っていますが、どちらもパッケージの循環依存関係に関係するクラスをリストできません。Metricsには興味深いサイクルのグラフ表示がありますが、これもパッケージに限定されており、非常に読みにくい場合があります。

私は取得するのにうんざりしています:

" 3 つのパッケージの間にはパッケージ サイクルの依存関係があります
。それぞれに xxx クラスがあります。
幸運にも適切なクラスを見つけて、このサイクルを断ち切りましょう"

サイクルが検出された理由を実際に説明する追加の手順を実行するツールを知っていますか (つまり、「関連するクラスを一覧表示する」など)。


Riiight... 結果を発表する時が来ました:

@l7010.de: ありがとうございます。特に「CAP」の回答については、(十分な担当者がいるときに)あなたに投票します...しかし、CAPは水中で死んでおり、私のEclipse 3.4とは互換性がありません。残りは商用で、フリーウェアのみを探しています。

@daniel6651: ありがとうございます。ただし、前述のとおり、フリーウェアのみです (最初に言及しておらず申し訳ありません)。

@izb findbugs の頻繁なユーザー (現在最新の 1.3.5 を使用) として、ワンクリックであなたの回答を受け入れることができます... findbug を有効にしてサイクルを検出するオプションを説明していただければ。その機能は、0.8.7 バージョンについてのみ言及されており(「クラス間の循環依存関係を検出するための新しいスタイル検出器」を探してください)、テストすることはできません。更新: 現在は機能しており、そのオプションがアクティブ化されていない古い findbugs 構成ファイルがありました。それでもCADは好きです;)

答えは...以下の私自身の(2番目の)答えを参照してください

4

9 に答える 9

25

さて...上記のDepFinderをテストした後、単純な依存関係をすばやく検出するのに最適であることがわかりましたが、クラスの数に応じてうまくスケーリングしません...

したがって、実際の答えは次のとおりです。 CDA - クラス依存関係アナライザー

高速で最新の使いやすく、クラスとその循環依存関係のグラフィカルな表現を提供します。夢が実現する ;)

クラスのディレクトリ (.class) のみを入力するワークセットを作成する必要があります (完全なクラスパスを指定する必要はありません)
オプション「循環依存関係の検出 - ALT- C」はアドバタイズとして機能し、CPU の 100% を使用しません。私の468クラスを分析するのに何時間もかかりました。
注: ワークスペースを更新するには、クラスの新しいスキャンをトリガーするために、ワークスペースを再度 (!) 開く必要があります。

スクリーンショット

于 2008-09-16T12:12:59.777 に答える
14

Findbugs はクラスの循環依存関係を検出でき、Eclipse プラグインも備えています。

http://findbugs.sourceforge.net/

于 2008-09-15T12:27:35.410 に答える
4

パッケージサイクルの検出にはソナーを使用しています。依存関係の素晴らしいグラフを描画し、どの依存関係が間違った方向に進んでいるかを示します。依存関係が使用されているソースに移動することもできます。

http://www.sonarsource.org/fight-back-design-erosion-by-breaking-cycles-with-sonar/を参照してください。

于 2010-08-05T14:13:20.873 に答える
4

これを行う必要があるStructure101もあります。

于 2008-09-15T12:26:58.113 に答える
1

また、Eclipse プラグインであるオープン ソース ツールCAPを使用できます。

CAP には、クラスへの行を表示するグラフィカルなパッケージ ビューがあるため、(円のサイズに応じて) 数回クリックすると、犯人が見つかります。

于 2008-09-15T12:27:17.877 に答える
1

最初に考えられる答えは... きれいではありません。しかし、それは私が求めていることを始めます (より良い解決策を以下に示します)。

依存関係ファインダーダウンロードして解凍します。

これまでで最も最新またはアクティブなプロジェクトではありませんが、[Dependency Finder]/bin/DependencyFinder.bat を編集し、DEFAULT_DEPENDENCYFINDER_HOME のパスを追加し、JAVA_HOME を設定すると、起動できます。

次に、「抽出」ボタン (CTRL-E - 最初のボタン) をクリックし、クラス パスを入力してスキャンします。

注意が必要なのは、結果の詳細レベルに圧倒されないように、「プログラミング要素」と「クロージャー」項目の正しいセットを正確にクリックすることです。

  • 左側の「クラス」のみを選択します (「プログラミング要素」)。
  • 右側の「クラス」のみを選択します (「クロージャー」)。
  • "/javax?./,/org./,/sun./" を除外パターンとして追加します (プログラミング要素とクロージャの両方)。
  • ホイールをクリックします (最後のボタン - すべて計算 - Ctrl+ A)。

そして、どうぞ。

'<->' が表示されるときはいつでも、適切な循環依存関係が得られます。(「閉鎖」側で「機能」を選択すると、どの機能がサイクルをトリガーするかを知ることさえできます-素晴らしいです。)

他の提案をテストする準備ができています。

于 2008-09-15T19:38:48.683 に答える
0

この目的に使用できる Structure101 と Lattix という商用ツールがいくつかあります。

于 2008-09-15T12:29:30.307 に答える
0

これを行うツールの 1 つがソフトウェアトモグラフです。それは商業的であり、UIは最悪です:o

于 2008-09-15T12:26:19.923 に答える