web-dev-qa-db-ja.com

EclipseWebプロジェクトの依存関係

この質問はEclipse開発に関するものです。EclipseでWebアプリケーションを作成しようとしています。問題は、デプロイされたアーカイブへの依存関係jarを取得できないことです。

新しい動的Webプロジェクトを作成し、それを別のJavaプロジェクトにリンクしました。Javaプロジェクトはいくつかのサードパーティjar(Spring jarなど)を参照していますがいくつかの理由で、Webプロジェクトを公開すると、戦争のlibディレクトリにJavaプロジェクトjarのみが表示され、Javaプロジェクトの依存関係(egSpring)はありません) 。

つまり、プロジェクトB(Javaプロジェクト)に依存するプロジェクトA(Webプロジェクト)があり、プロジェクトBはSpringjarに依存しています。 WebプロジェクトをJBossへの戦争として公開すると、プロジェクトBのみがjarにパッケージ化されます(Spring jarは含まれません)。

私はantでそれができることを知っています、私はアプリ全体を構築するためにそのようなbuild.xmlさえ持っています、しかし私はEclipseが私のためにパッケージングタスクも実行できると思いました。

JavaプロジェクトをWebプロジェクトのJava EEモジュールの依存関係に追加しました。

Javaプロジェクトビルドパスプロパティでエクスポートオプションを使用する必要がありますか?Javaプロジェクトの依存関係もWebプロジェクトに追加する必要がありますか?

私は何が間違っているのですか?

編集:Eclipse3.5.1を使用しています

25
LiorH
  1. Webプロジェクトのプロパティに移動します。
  2. 展開アセンブリ(左)。
  3. 追加>プロジェクトの選択> libプロジェクトの選択>チェックされていない場合は「プロジェクトをWebアプリケーションのWEB-INF/libフォルダーにアセンブルする」にチェックを入れます>終了。
  4. Javaビルドパス(左)> [プロジェクト]タブ> [追加...]>ライブラリプロジェクトを選択> [OK]
  5. Javaビルドパス(左)> [注文とエクスポート]タブ> libプロジェクトを選択します。
  6. 保存する
  7. 今では動作します。
51
Rod Lima

前回の投稿から4年が経ち、当時はこのオプションが利用できなかったかもしれませんが、これが私にとってうまくいったことです。

  1. Webプロジェクト->プロパティに移動します
  2. 展開アセンブリ
  3. [追加]ボタンを使用して、プロジェクトの依存関係を追加します
  4. 依存しているプロジェクトの[プロジェクト]-> [プロパティ]に移動します
  5. Deployment Assembly
  6. [追加]ボタンを使用して、プロジェクトのランタイムライブラリの依存関係を追加します
  7. Webプロジェクト->実行者..->サーバー上で実行し、それは私のために働いた

手順4〜6は、Eclipseを使用してjarファイルをビルドしている場合、依存ライブラリがそのjarに含まれることを意味することに注意してください。

ステップ3に進むのを手伝ってくれたrodgarcialimaに感謝します。

4
George

また、Eclipse WTPで報告されたこのバグにも注意してください。これにより、すべてを正しく構成した場合でも、依存関係がWEB-INF/libにデプロイされないことがあります。はぁ。

Bug 312897-デプロイメント機能はクラスパスの依存関係をデプロイしません。

私が理解しているように、Eclipseでコンパイル時にJARを使用し、実行時にappserverでも使用できるようにするには、次のようにします。

  • JARをビルドパスに追加します
  • JARをエクスポートされたEEモジュールの依存関係としてマークします

使用している別のプロジェクトで必要なJARが必要な場合は、ビルドパスに明示的な依存関係として個人的にリストし、エクスポートされたモジュールの依存関係に追加します。

しかし、EclipseプロジェクトでNoClassDefFoundエラーが発生する理由を探しているときにこの投稿に出くわしたので、私の答えを額面通りに受け取らないでください...;)

2
Stijn de Witt

JavaプロジェクトをWebプロジェクトのJava EEモジュールの依存関係に追加しました。

otherプロジェクトの依存関係(読み取り:JARファイル/プロジェクトなど)をcurrentプロジェクトのランタイムクラスパスに取り込むことが目的である場合は、その方法のみが行われます。動作しません。 otherプロジェクトをexportの依存関係に設定する必要があります。これは、ビルドパスプロパティの[注文とエクスポート]タブで実行されます。お役に立てれば。

2
BalusC

私があなたを正しく理解している場合、問題は、プロジェクトBに依存するプロジェクトAを使用すると、プロジェクトBからアーティファクトを取得せず、Aのみを取得することです。

問題は、プロジェクトが必要なものをすべて[プロパティ]-> Java EEモジュールの依存関係にリストする必要があることです。これは、通常のプロジェクトのエクスポートとは別のメカニズムです。おそらく、いくつかの実験を行う必要があります。 。

デプロイする前に、WebアプリをWARファイルにパッケージ化する必要があります。どのJARファイルをWEB-INF/libディレクトリに配置するかをEclipseに指示する方法が必要です。そうでない場合は、それを実行するAntbuild.xmlを作成します。

環境またはアプリサーバーのいずれかでクラスパス変数を変更する必要はありません。それを行う正しい方法は、適切なWARファイルを作成することです。

更新:私はあなたの質問を読み直しました:

しかし、いくつかの理由で、Webプロジェクトを公開すると、JBossのlibディレクトリにJavaプロジェクトjarのみが表示され、依存関係jar(Springなど)は取得されません)。

これは何を意味するのでしょうか? JBOSS/libディレクトリに何も入れないでください。 WARファイルの要点は、それがすべての依存関係を引き継ぐ自己完結型のアーティファクトであるということです。 JBOSS/libディレクトリに何かを書き込もうとしているのなら、それは間違っています。

WARファイルは、設定したドメインに移動する必要があります。アプリサーバーを変更する必要はありません。

0
duffymo