3

Java の「循環 jar 参照」に関する質問をいくつか見ましたが、何も表示されません。

私の質問は、各jarが他のjarのクラスへのメソッド呼び出しを持つ2つのjarを構築するにはどうすればよいですか? 各jarプロジェクトの特定のクラスは、他のjarからクラスをインポートする必要があるため、ビルドのクラスパスで他のjarを参照する必要があるようですが、他のjarは同じためにコンパイルできません必要。

すべてのクラスを 1 つの大きなプロジェクトとしてコンパイルし、クラスを相互依存関係のある個別の jar にパッケージ化することは理解できましたが、クラスパスに他の jar を含める必要があるため、各 jar のクラスを個別にコンパイルすることは不可能のようです。

私にとっての関連性は、別のプロジェクトで使用するためにコードを jar に開発することです。ただし、他のプロジェクトからいくつかの API 呼び出しを使用する必要があります。これを行う唯一の方法は、いくつかの一般的に使用される独立した api クラスを、元の 2 つのプロジェクトの両方がクラスパスに含めることができる 3 番目のプロジェクト/jar に分離することです。

これについて別の見方はありますか?

4

2 に答える 2

0

ほとんどの一般的なビルド ツールは循環依存関係を処理できませんが、2 つの jar のいずれかの開始バイナリ バージョンが少なくとも存在する限り、手動インクリメンタル ビルドに循環依存関係を含めることができない理由はありません。

ビルド ツールはこのような依存関係を処理できないため、実際にはめったに遭遇せず、ほとんどの Java 開発者は設計が悪いと考えています。

于 2013-02-27T20:18:59.503 に答える
0

コンパイル時に jar として互いに参照する必要はありません。クラスパスが開発時にそれを反映するように構成されている限り、それらは相互に参照する 2 つの別個のプロジェクトである可能性があります。

したがって、次のようなユース ケース シナリオを作成できます。

Api1.Class11 references (or imports) Api2.Class21

Api2.Class22 references Api1.Class12

プロジェクト レベルでは循環参照ですが、クラス レベルではそうではないため、これは正当です (2 つのプロジェクトが 1 つに統合され、このシナリオがあった場合を想像してください)。

jar にバンドルされると、それらを使用してクラスパスに両方を含め、実行時にお互いを認識できるようにするのは、クライアント アプリケーションの役割です。

個人的には、このやり方はややこしいと思いますが、可能です。わかりやすくするために、私自身は循環参照を使用しません。

于 2013-02-27T20:07:49.270 に答える