2012-03-05 23 views
1

通常のJ2EEアプリケーションをMavenを使用するように変換しています。私は正常にMavenに変換することができました。私は成功した "mvn deploy"を取得しています。この問題はWASに耳を展開した後に直面しています。私は受け取っています SRVE0203E:サーブレット[アクション] org.apache.struts.action.ActionServletには別の必須クラスがありません。WEB-INF libと.classpathに存在する必要があるjar

私はさまざまなアプリケーションで同様の問題を抱えていましたが、JARの「除外」を2回試行した後、WASでアプリケーションを正常に展開できました。私は次の質問があります。

  1. WEB-inf \ libフォルダにすべてのjarファイルが存在する必要があるかどうかを確認するにはどうすればよいですか?

  2. 戦争のmeta-infの.class-pathにすべての瓶が存在する必要があるかどうかを、どのように判断できますか?私たちは戦争が瓶は.classpathに言及したが、それはWEB-INFのの\ libに存在することが必要であることを必須とされていない場合でも動作することを決定するにはどうすればよい

  3. (つまりクラスローダではなく、戦争の耳から引っ張ってくる)

FYI私は、J2EE 1.4

答えて

2
を使用していますコンテナで実行

A Java EEアプリケーションは、いくつかのレベルで構成クラスパスがあります。

  1. Webアプリケーションのクラスパス、represをJARとクラスファイルでentedは、WebSphereランタイムと共有ライブラリが含まれているEARレベル
  2. コンテナのクラスパスで宣言JARファイルが含まれて
  3. エンタープライズアプリケーションのクラスパスのlib WEB-INF /、、に含ま
  4. あり

これらのレベル間の複雑な依存関係のルールがありますが、主なアイデアは、すべてのアプリケーションのライブラリが矛盾が破損する可能性があり、クラスパスを避け、このレベルの間に含まれなければならないということです。

これを念頭に置いて、簡単なアプローチはすべてのアプリケーションJARをWEB-INF/libに入れることです。これはうまくいくはずですが、EARに2つのWebモジュールがある場合、各モジュールにはJARSの独自のセットが必要です。より堅牢なアプローチは、共通JARをEARレベルに含めることで、JARの重複は回避されます。

場合は、あなたの会社は、すべてのアプリケーションが使用propietaryフレームワークを持っているということであれば、会社のすべてのEARアプリケーションで同じjarファイルを含めるように愚かなことでしょう。これを行うより良い方法は、コンテナ内の共有ライブラリとして会社のフレームワークを設定して、すべてのアプリケーションで再利用できるようにすることです。

結論として、Java EEアプリケーションのクラスパスを決定するいくつかの要因があります。重複やバージョンの競合を避けるために、アプリケーションは依存関係をスムーズに解決できるように常に注意する必要があります。

+0

こんにちはカルロスありがとうございます。これは私がにして実行しているものです。 1.私が正しいならば、耳と戦争の両方で瓶を複製すると、クラスの読み込みの問題が発生する可能性があります。我々は除外した場合、支柱は、いくつかの追加の推移に依存jars.Soをもたらす可能性がありますので、私は、耳や戦争の両方でduplicacityを回避する最善の方法は何かlibに私のWEB-INFではstruts.jarのようないくつかのjarファイルを使用していた場合などのために2ストラテジを呼び出す際に必要なクラスを使用できないというデプロイメントが失敗した後、他の推移的な依存性が失われます。私はまだこの問題を抱えており、これを解決する方法はわかりません。 – techrawther

+0

エンタープライズアプリケーションにはいくつのWebモジュールがありますか?モジュールが1つだけの場合は、WEB-INF lib内にStrutsとそのすべての依存関係を入れて、他のモジュールのクラスパスを混乱させないようにするのが最善の方法です。 –

+0

3つのWebモジュールがあり、すべての3つのwarファイルにスペースを消費します。 – techrawther

関連する問題