私のJavaプロジェクトでは、サードパーティ製のjarパッケージが使用されています。最終的なwarファイルを作成するときは、サードパーティのパッケージ全体を含めるか、プロジェクトごとに使用するjarファイル(各パッケージから特定のjarファイルのみを選択する必要がありますか? Javaでこれを行うための厳密な方法は何ですか?パッケージ全体または特定のジャーだけを含めるには?
答えて
これを行う標準的な方法は、すべての依存jarをWARファイルのWEB-INF/lib
ディレクトリにパッケージングすることです。 AntやMavenのようなほとんどのビルドツールは、デフォルトでこれを行います。
WARファイルの最終サイズを意識している場合はパッケージ単位で再パッケージングできますが、例外はあります。これは、ダウンロードのサイズを最小限に抑える必要のあるクライアントの導入(WebStartなど)などを処理する場合に、より頻繁に行われます。
おすすめ:それは簡単です。
ありがとうございます。私はちょっと混乱しています。パッケージ全体を含めるか、どのJarが「依存」していて実際に自分のコードで使用されているかをテストすることを意味しましたか? – Danijel
さて、どのライブラリを使用しているかを定義する方法が必要です。たとえば、Jakarta Commons Lang( 'StringUtils'など)のクラスを使用しているとします。つまり、commons-lang jarファイルをインクルードする必要があります。 Eclipseを使ってコードをどのようにコンパイルしていますか?あなたが使用しているライブラリは、あなたが何を含める必要があるかについての指示を与えるべきです。 Mavenのようなツールもこれを手伝ってくれるでしょう。依存関係を定義し、それらを束ねるのに役立つからです。 – nwinkler
パッケージ全体と、使用されているジャー(とそれらの依存関係)だけを含めないと言っていますか? – Danijel
最高の答えは "それは...依存する"でしょう。
同じサードパーティを使用する他の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に必要なジャーを含めることです。
ありがとうございます。しかし、瓶を入れる場所はありませんが、どの瓶を入れても問題ありません。私のアプリはony 3 jarでうまくいくことがわかります(これはすべての場合に真実であることを確認する方法です)私は3つのjarファイルをWEB-INF \ libをコピーするか、すべて20をコピーする必要がありますか?*適切なものは何ですか? – Danijel
@Danijel、私はできるだけあなたのアプリケーションでいくつかのサードパーティのjarファイルをパッケージ化しようとしなければならないと言いました。例えばwebapp1とwebapp2の両方jsf-ap1.jarこのjarファイルを両方ともパッケージ化する必要はありません。共有ライブラリにそれを入れてもかまいません.3つのjarファイルと20個のjarファイルで説明しています。アプリケーション(できるだけパッケージ化しないために)依存グラフツール私はCDA - クラス依存関係アナライザーは外部ツールであり、Eclipseプラグインよりもはるかに読みやすい依存グラフを生成します。 – aviad
さて、わかりました。私が出荷する瓶の数を最小限にしようとします。 CDAを試みます。 – Danijel
- 1. パッケージ全体ではなくTkinterウィジェットメソッドを1つだけインポートするには?
- 2. NSUserDefaultsはデバイス全体またはアプリケーションだけに共通です
- 3. 要約だけでなく、投稿全体を含めます。 Jekyll
- 4. 特定のフィールドまたはページ全体に属性novalidate
- 5. 全体のPHPディレクトリを含めます
- 6. クラス全体のインスタンスまたは特定の値だけを渡す方が良いですか?
- 7. パッケージ全体のデフォルトインポートを定義する
- 8. インポートモジュール(またはパッケージ).functionは実際にモジュール/パッケージ全体をインポートしますか?
- 9. 特定のdivでキーワードを見つけるだけではなく、文書全体
- 10. .Netフレームワーク全体ではなく、必要なdllだけを含めることは可能ですか?
- 11. ボタンのアニメーションは特定のマージンのためだけに機能します
- 12. ページから特定のdivだけをページ全体ではなくターゲットdivに移動する方法
- 13. 特定のコード行のみをメソッド全体に詰め込む
- 14. "Insert .. Duplicate"は行全体または特定の列を更新しますか?
- 15. Amazon S3:特定のリファラーのためだけに、特定のパスへのアクセスを許可する方法は?
- 16. 私は、特定のURLのためのセキュアHTTPを削除するだけ
- 17. 特定のマーカーのためだけにInfoWindowAdapterを設定する方法
- 18. Authlogic - アップデートのためだけにpassword_confirmationを設定するには?
- 19. リストビューだけでなく、全体ビューをスクロールする方法は?
- 20. キャンバス全体ではなくテキストだけを回転する
- 21. MapReduceで特定の単語を含む文全体を削除します
- 22. パッケージ自体のためにビネットにRパッケージをロードする
- 23. sql、文字列を見つけるためのストラテジーには特定のテキストが含まれています
- 24. ウェブサイト全体ではなく、特定のリソースをブロックする
- 25. Drupal 6の特定のノードにCSSまたはJavascriptファイルを含める
- 26. 特定の文字列を含む行全体をフィルタリングする方法
- 27. 特定の文字列を含む行全体を出力するawkコマンド
- 28. は、唯一の財産全体ではなく、データベースの行を含める
- 29. パッケージ全体のためにPythonモジュールをインポートする方法はありますか?
- 30. GIMP:フォアグラウンド全体を特定の色に設定する
明らかに、warファイルには、使用するすべてのサードパーティライブラリ(JARファイル)をパッケージする必要があります。各パッケージの特定のJARはどういう意味ですか? –
私は20個のジャーを持っているTomahawkライブラリを使っています。私は、私のアプリがony 3 jarでうまくいくことを知っています(これはすべての場合に真実であることを確認する方法です)。質問は:WEB-INF \ libに3つのjarファイルのみをコピーするか、20をすべてコピーする必要がありますか?何が正しいのですか? – Danijel
推移的な依存関係を解決するMavenのようなツールを使用していない限り、本当に必要なものを見つけるためには、ほとんどの試行錯誤があります。ほとんどの場合、瓶の名前はあなたにヒントを与えます。 – nwinkler