8

プログラマーは他のソフトウェアのコードを再利用することがよくあります。ほとんどの場合、それは良い考えだと思います。ただし、別のプロジェクトのコードを使用する場合、プログラムは他のプロジェクトに依存します。

私の現在のケースでは、3つのJavaプロジェクトA、B、Cを取得しました。AはBを使用し、BはCを使用します。EclipseIDEを使用しており、AのビルドパスにBを追加し、BのビルドパスにCを追加しました。 AがCから何かを解決できないというコンパイラエラー。したがって、BのビルドパスにCを追加する必要があります。

では、プログラムを他のプロジェクトから可能な限り独立させながら、依存関係を解決するための最良の方法は何でしょうか。

私は一般的に、そして私の現在の状況に関連して知りたいです。これを行うためのより良い方法はありますか?つまり、起動/デバッグ構成ビューにクラスパス設定がありますが、コンパイル時には役に立たないと思います。

前もって感謝します。

4

8 に答える 8

7

これは、Maven によって修正された一連の問題の一部のように思えます。Maven と Eclipse、つまり m2eclipse を使用すると、プロジェクトに他のプロジェクトを使用させることができ、すべての依存関係の解決が処理されます。

于 2009-12-18T17:02:32.223 に答える
2

「推移的な依存関係管理」の機能を提供する Ivy や Maven などの依存関係管理ツールを組み込むことなく、必要なことを行っているように思えます。これらのツールのいずれかを使用すると、A が B に依存し、B が C に依存することを指定するだけで、A にも C が必要になることが自動的にわかります。

Maven の利点 (これは私が経験したことです) は、展開用にプロジェクトをパッケージ化するときにも役立ちます。これは、これらの依存関係をすべて (階層のずっと下まで) 簡単に収集し、それらをまとめてディストリビューションに配置できるためです。フォルダ、またはすべての依存関係を含むファット JAR です。Maven のようなツールを使用するには、読み取りとセットアップに時間がかかりますが、特に依存関係が大きくなるにつれて、依存関係を管理するタスクが非常に簡単になります。

于 2009-12-18T17:06:17.943 に答える
1

mavenを使用して依存関係を管理してから、依存関係プラグインを使用して依存関係を確認します。

あなたが実行することができます

mvn依存関係:分析

また

mvnの依存関係:tree-Dverbose = true

これはあなたに大いに役立ちます。

于 2009-12-18T18:08:45.040 に答える
1

他の人はいくつかの優れたツールについて言及していますが、maven がおそらく最も一般的です。Ivy は、依存関係の管理のみを対象とした別のツールです。私は個人的に、おなじみのグルーヴィーなラッパーの下にこれらすべての機能の中で最高のいくつかを備えたgradleを使用しています...それはまだ進化しており、文書化されています。;)

注意すべきことの 1 つは、これらのツールが推移的な依存関係を処理する方法です。あなたの例では、A は C に依存する B に依存するため、C は A の推移的な依存関係です。これらのビルド ツールの一部は、このタイプの依存関係を異なる方法で処理し、予期しないときに驚くことがあります。

たとえば、A が実際に C のコードを参照している場合、つまり、コンパイル時に C に依存している場合、A->B->C セットアップは Maven のようなもので機能します。一方、gradle では、A が C に依存していることを宣言することもできます。ランタイムの依存関係は、どちらの方法でも完全に解決されます。

何ヶ月も何かを推移的にインクルードしていて、コードの一部が C の側面に依存しており、B 依存関係が不要になったと判断した場合、驚きが生じます。A->C 依存関係を指定する必要があることがわかるまで、突然、コードがビルドされなくなります。この例では、それを発見するのは非常に簡単ですが、そうでない場合もあります。

そして、そのような話で頭が少し泳ぎ、プロジェクトがこれ以上複雑になる予定がない場合は、おそらくしばらくの間、自分がしていることに固執することができます. 他の人が言ったように、ツールを使わずにそれを行うのは正しい方法です。

于 2009-12-18T18:03:47.263 に答える
1

私たちは Maven を使用しており、これは私たちのプロジェクトに不可欠です。学ぶのに良い時期です。3 つ以上のプロジェクトへの依存関係は恐ろしいものです。Maven はバージョンを処理するため、何らかの理由で Foo.1.2.3 に依存する必要がある場合、Maven は間違ったバージョンを取得しないようにします。

しかし、それは些細なことではありません。Netbeans を使用している場合は、Eclipse よりも優れた機能が組み込まれており、学習に役立つ可能性があります。(また、プロジェクトは 2 つのシステム間でかなり切り替え可能です)。

Maven は、ライセンス情報、寄稿者、引数などを含む POM (pom.xml) ファイルで多くの概念をサポートしているため、依存関係の管理だけではありません。また、プロジェクトのモジュール化をサポートします。

学習曲線をスキップしないでください - それがどのように機能するかを知る必要があります. ただし、役立つ以前のSOの質問も見つかります

于 2009-12-18T17:22:26.037 に答える
1

人々が指摘しているように、依存関係管理ツールを使用する必要があることは間違いありません...手動で、BとCをB_C.jarにアーカイブします。B の C への依存が Jar 内で解決されることをテストします。

次に、クラスパスに B_C.jar を追加します...

于 2009-12-18T18:19:13.987 に答える
0

無料のMavenブック:

http://www.sonatype.com/documentation/books

于 2009-12-22T08:15:09.460 に答える
0

依存関係の管理は大きなトピックです。Maven、Ivy、およびその他のツールが開発されて、この問題を軽減し、ある程度の成功を収めています。これらのツールはどちらも依存関係の階層を作成するため、説明した状況に陥ることはありません。また、Eclipse がその階層を認識できるように、Eclipse プラグインもあります。

これらのフレームワークを真に使用するには、現在のビルド プロセスを変更する必要があります。Maven はおそらく Ivy よりも多くのコミットメントを必要としますが、どちらも些細なことではなく、セットアップ方法を理解するには少し時間がかかります。とはいえ、依存関係を明確に定義して管理することは非常に役立ちます。

于 2009-12-18T17:07:53.040 に答える