8

私のプロジェクトでは、独自の依存関係を持つJavaライブラリ(Hadoop、Jettyなど)を使用しています。ant 1.4.5、1.4.6のように、同じ依存関係の異なるバージョンになってしまいます。私のプロジェクトはant1.4.7を使いたいかもしれません。これは小さな例であり、HTTPCommonsのような大きな依存関係ではさらに複雑になる可能性があります。

すべてのライブラリと依存関係をうまく機能させるにはどうすればよいですか?各ライブラリ(Hadoop、Jetty)を分離して、依存関係のみを使用する方法はありますか?

4

5 に答える 5

2

JarJarが救助に!

antは、1)多くのjarファイルを1つにパックし、2)クラスファイルの依存関係の名前を変更して、同じライブラリの2つのバージョンをロードできるようにします。

于 2008-11-10T04:03:54.503 に答える
2

Maven は、通常、これをかなりうまく処理します。完全ではない場合でも、少なくとも大部分は処理されるので、残っている問題を整理できます。

もちろん、それはビルド プロセスを変更する必要があることを意味しますが、これについて頭を悩ませないために、しばらくの間価値があるかもしれません。

于 2008-11-08T05:04:31.217 に答える
2

OSGI などの依存関係管理フレームワークを使用して、これらすべてを管理することを選択できます。Spring フレームワークの動的モジュールhttp://www.springsource.org/osgiをご覧ください。

また、Eclipse が OSGI を実装するフレームワークの部分を確認することもできます。ここを見てください http://www.eclipse.org/osgi/

簡単な答えは、最小公分母を求めることです。「承認済み」ディレクトリは、競合する依存関係を管理する際の味方であることを忘れないでください。

于 2008-11-08T04:25:01.403 に答える
1

ソースコードがある場合は、すべてをまとめてコンパイルします。そうしないと、残念ながら、javac へのターゲット オプションを使用して、最小公分母のソースをターゲットにする必要があります。これは、アプリケーションの実行時に実際の問題が発生した場合にのみ行う必要があります。これは、jvm が現在のバージョンである限り、めったに発生しないはずです (Java は、古いバージョンとのバイナリ互換性について非常に厳密です)。

于 2008-11-08T03:57:48.013 に答える
0

JG は、この質問を読んだときに私が最初に考えた OSGi について言及しました。

同じライブラリの複数のバージョンを持つことは、OSGi の強みです。すでに言及されているサードパーティ製品がある場合は、その背後にある仕様についても言及するのが妥当だと思います.

osgi の公式サイトhttp://osgi.orgから入手できます。

于 2008-11-11T09:21:00.230 に答える