2012-03-14 3 views
1

私のJavaプロジェクトでは、サードパーティ製のjarパッケージが使用されています。最終的なwarファイルを作成するときは、サードパーティのパッケージ全体を含めるか、プロジェクトごとに使用するjarファイル(各パッケージから特定のjarファイルのみを選択する必要がありますか? Javaでこれを行うための厳密な方法は何ですか?パッケージ全体または特定のジャーだけを含めるには?

+0

明らかに、warファイルには、使用するすべてのサードパーティライブラリ(JARファイル)をパッケージする必要があります。各パッケージの特定のJARはどういう意味ですか? –

+0

私は20個のジャーを持っているTomahawkライブラリを使っています。私は、私のアプリがony 3 jarでうまくいくことを知っています(これはすべての場合に真実であることを確認する方法です)。質問は:WEB-INF \ libに3つのjarファイルのみをコピーするか、20をすべてコピーする必要がありますか?何が正しいのですか? – Danijel

+0

推移的な依存関係を解決するMavenのようなツールを使用していない限り、本当に必要なものを見つけるためには、ほとんどの試行錯誤があります。ほとんどの場合、瓶の名前はあなたにヒントを与えます。 – nwinkler

答えて

1

これを行う標準的な方法は、すべての依存jarをWARファイルのWEB-INF/libディレクトリにパッケージングすることです。 AntやMavenのようなほとんどのビルドツールは、デフォルトでこれを行います。

WARファイルの最終サイズを意識している場合はパッケージ単位で再パッケージングできますが、例外はあります。これは、ダウンロードのサイズを最小限に抑える必要のあるクライアントの導入(WebStartなど)などを処理する場合に、より頻繁に行われます。

おすすめ:それは簡単です。

+0

ありがとうございます。私はちょっと混乱しています。パッケージ全体を含めるか、どのJarが「依存」していて実際に自分のコードで使用されているかをテストすることを意味しましたか? – Danijel

+0

さて、どのライブラリを使用しているかを定義する方法が必要です。たとえば、Jakarta Commons Lang( 'StringUtils'など)のクラスを使用しているとします。つまり、commons-lang jarファイルをインクルードする必要があります。 Eclipseを使ってコードをどのようにコンパイルしていますか?あなたが使用しているライブラリは、あなたが何を含める必要があるかについての指示を与えるべきです。 Mavenのようなツールもこれを手伝ってくれるでしょう。依存関係を定義し、それらを束ねるのに役立つからです。 – nwinkler

+0

パッケージ全体と、使用されているジャー(とそれらの依存関係)だけを含めないと言っていますか? – Danijel

0

最高の答えは "それは...依存する"でしょう。

同じサードパーティを使用する他のWebアプリケーションを実行する場合は、これらのjarを共有場所に配置することをお勧めします(すべてのアプリケーションサーバーがそのようなディレクトリを提供します)。実行時にWebアプリケーションに必要なクラスは、この共有場所からロードされ、Webアプリケーションで使用できるようになります。このアプローチは、あなたの戦争を小さくし、展開時間を短縮します。

例:jsf-api.jarを使用してwebapp1とwebapp2の両方を使用しています。このjarを両方ともパッケージする理由はありません。共有ライブラリに含めることができます。状況では、3つのjarファイルと20個のjarファイルを記述していますが、アプリケーションの依存関係グラフを分析するためのツールをいくつか使用します(できるだけパッケージ化しないため)。依存関係グラフツールCDA - Class Dependency Analyzerは外部ツールであり、Classycle EclipseプラグインまたはEclipseクラス依存関係ビューよりもはるかに読みやすい依存関係グラフを生成します(他のIDEには優れたツールがありますか?IntelliJは...)

しかし、異なるWebアプリケーションが同じサードパーティ製のjarファイルの異なるバージョンを使用する場合は、バージョンの衝突が発生する可能性があります。 これらの衝突を解決することはPITAであり、アプリケーションサーバーベンダーの展開メカニズム(コンポーネントとアプリケーションの両方のクラスローディングポリシー)の仕組みを理解する必要があります。だから、最も安全なのはあなたの戦争のWEB-INF \ libに必要なジャーを含めることです。

+0

ありがとうございます。しかし、瓶を入れる場所はありませんが、どの瓶を入れても問題ありません。私のアプリはony 3 jarでうまくいくことがわかります(これはすべての場合に真実であることを確認する方法です)私は3つのjarファイルをWEB-INF \ libをコピーするか、すべて20をコピーする必要がありますか?*適切なものは何ですか? – Danijel

+0

@Danijel、私はできるだけあなたのアプリケーションでいくつかのサードパーティのjarファイルをパッケージ化しようとしなければならないと言いました。例えばwebapp1とwebapp2の両方jsf-ap1.jarこのjarファイルを両方ともパッケージ化する必要はありません。共有ライブラリにそれを入れてもかまいません.3つのjarファイルと20個のjarファイルで説明しています。アプリケーション(できるだけパッケージ化しないために)依存グラフツール私はCDA - クラス依存関係アナライザーは外部ツールであり、Eclipseプラグインよりもはるかに読みやすい依存グラフを生成します。 – aviad

+0

さて、わかりました。私が出荷する瓶の数を最小限にしようとします。 CDAを試みます。 – Danijel

関連する問題