Java パッケージ サイクルの検出:関連する特定のクラスを見つけるにはどうすればよいですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/62276

質問

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

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

私は次のことを取得するのに疲れてきました:

「これら 3 つのパッケージ間にパッケージ サイクルの依存関係があります。」
それぞれに xxx クラスがあります
適切なクラスを見つけて、このサイクルを断ち切ってください。」

サイクルが検出された理由を実際に説明するために追加の手順を実行するツールをご存知ですか (例:'関係するクラスをリストします')?


そうだね…結果を発表する時が来ました:

@l7010.de:ご苦労様でした。(十分な担当者が得られたら) 特に「CAP」の回答に賛成票を投じます...しかし、CAP は機能不全に陥り、私の Eclipse 3.4 とは互換性がなくなりました。残りは商用であり、フリーウェアのみを探しています。

@ダニエル6651:ありがとうございます。ただし、前述のとおり、フリーウェアのみです(最初から言及していなくて申し訳ありません)。

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

答えは...見る 以下の私自身の(2番目の)答え

役に立ちましたか?

解決

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

http://findbugs.sourceforge.net/

他のヒント

良い...テスト後 上記の DepFinder, 単純な依存関係を迅速に検出するには優れていることがわかりましたが、クラスの数に応じてうまく拡張できません...

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

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

クラス (.class) のディレクトリのみを入力するワークセットを作成する必要があります (完全なクラスパスを持つ必要はありません)。
オプション「循環依存関係を検出 - オルタナティブ-C" は宣伝どおりに機能し、468 クラスの分析に何時間も CPU を 100% 使用することはありません。
注記:ワークスペースを更新するには、クラスの新しいスキャンをトリガーするために、ワークスペースを再度開く必要があります (!)。

screenshot

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

見る http://www.sonarsource.org/fight-back-design-erosion-by-breaking-cycles-with-sonar/

もあります 構造101 これを行うべきはどれですか。

ハイホイール クラスとパッケージのサイクルを検出し、依存関係のソースをクラス/メソッド/フィールド レベルまで報告し、関係の種類 (継承、合成、メソッド シグネチャの一部など) を示します。

また、大きなサイクルを、個別に理解/対処できるサブ要素に分割します。

出力は、最新のブラウザを必要とする SVG コンテンツが埋め込まれた HTML です。

オープンソースツールを使用することもできます キャップ これは Eclipse プラグインです。

CAP には、クラスへの行が表示されるグラフィカルなパッケージ ビューがあり、数回クリックすると (円のサイズに応じて) 原因がわかります。

最初に考えられる答えは...美しくない。しかし、それは私が後にしていることをし始めます(より良い解決策は 以下に示します).

依存関係ファインダー! ダウンロードしてください, 、解凍します。

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

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

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

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

さあ、どうぞ。

「<->」を見るたびに、あなたは素晴らしいものを手に入れています。 循環依存関係. 。(「クロージャ」側で「機能」を選択すると、どの関数がサイクルをトリガーするのかを知ることもできます。素晴らしいです。)

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

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

これを行うツールの 1 つがソフトウェアです。 断層撮影装置. 。それは商用であり、UIは最悪です:o

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top