Eclipse の問題ログには、「プロジェクトのビルド パスでサイクルが検出されました ....」と表示されます。どのプロジェクトが相互に依存しているかわかりません。
7 に答える
Eclipse で循環依存関係の重大度を調整できます。
Preferences > Java > Compiler > Building > Build path problems > Circular dependencies
Eclipse でプロジェクト間の循環的な依存関係を削除するには、次の 3 つの方法があります。
1. プロジェクトに移動 -> Java コンパイラ -> ビルド -> プロジェクト固有の設定を有効にします。
ビルド パスの問題を選択し、循環依存のオプションとして警告を表示します。
2. プロジェクト -> Java ビルド パスに移動します。プロジェクトタブで、プロジェクトを選択して削除します。
3. META-INF フォルダーに移動し、MANIFEST.MF を開きます。MANIFEST.MF ビュー タブでは、循環依存プロジェクトが [パッケージのインポート:] 列に表示されます。
列からプロジェクトを削除します。
最初のオプションは、実際にはエラーを解決しません。2 番目と 3 番目のオプションは、この依存関係を解決する正しい方法です。
プロジェクト設定では、依存関係を確認できます。できることは、すべての依存関係を削除して、dep を次々と追加することです。サイクルとは、そのようにするべきではなかったことを意味します。クラスを特定した後のソリューションでは、大きなプロジェクト A がセカンダリ プロジェクト B からクラス CB1 を必要とし、CB1 がプロジェクト A からクラス CA1 を必要としているとします。
- プロジェクトAのクラスCB1を移動して依存関係を削除します->依存関係をさらに作成しない場合は機能します。
- インターフェイスを抽出し、依存しないインターフェイスを使用します (構造によっては、スーパー クラスまたはそれ以上のインターフェイスを作成する必要がある場合があります)。
- 別の方法で実装しますが、なぜ他のプロジェクトのクラスが特に必要なのですか? 共通の親クラスがある場合はそれを使用してみてください
プレーンな Java プロジェクト間の依存関係を確認するには、プロジェクト プロパティ | を参照してください。Java ビルド パス | プロジェクト。J2EE プロジェクトがある場合は、[プロジェクト プロパティ] | [プロジェクト プロパティ] に追加の設定があります。プロジェクトの参照。すべてのプロジェクトについてそれらを確認し、紙 (または画面) にグラフを作成し、サイクルを断ち切るために何ができるかを確認します。
通常、健全な依存関係グラフはスターの形をしており、コア プロジェクトには共通のリソースが含まれ、各リーフ プロジェクトには特定のユーザー機能が実装されています。詳細には、コアは実際にはいくつかの相互依存プロジェクトで構成されている場合があります。大きな葉も同様。
依存関係サイクルから抜け出す典型的な方法は、いくつかの密接に結合されたプロジェクトをマージすることです。
プロジェクトまたはコード自体をリファクタリングする必要がある場合があります。アプリケーションのパッケージングに問題がある可能性があります。
私はずっと前にこの問題に遭遇しました。その問題をどのように解決したかを忘れていましたが、必要なプロジェクトのクラスから必要なプロジェクトのクラスへの通信に関しては、受信者に Java をインストールしてもらいました。送信側の .lang.reflect.Method オブジェクト。送信側のコード内で sendee クラスを宣言せずに呼び出すことができます。
送信者と受信者がインターフェースを共有するなど、これを行うための好ましい方法があると確信していますが、コーディングの経済性の観点からは、これが最も簡単なようです。
他の回答が示唆しているように、これは真の循環性ではなく、Eclipse 設計のアーティファクトのようです。