0

A、B、CなどのTomcat webappsディレクトリに多くのアプリケーションをデプロイしています。

また、すべての A、B、および C で使用する必要がある、Z という別のユーティリティ プロジェクトが 1 つあります。

これを行う 1 つの方法は、Z プロジェクトの .class ファイルをすべての A、B、および C プロジェクトのクラス フォルダーに配置することです。

Z プロジェクトをそのままにしておくことは可能ですか? A、B、および C で同じ Z プロジェクトの参照を与えるだけでよいので、3 つのプロジェクトすべてで jar または .class ファイルをコピーする必要はありません。

はいの場合、これを行う方法は?

ばかげた質問をして申し訳ありません....しかし、疑問を解消したいと思います。

ありがとう

4

1 に答える 1

0

Web アプリケーションは、個別のクラス ローダーに分離されます。このようにして、アプリのクラスとライブラリが別のアプリに影響を与えることはありません。アプリケーション間でクラスまたはライブラリを共有する場合は、それらを共通のクラス ローダーに配置できます。

Tomcat 6クラスローダーのハウツーから

  Bootstrap
      |
   System
      |
   Common
   /     \   

Webapp1 Webapp2 ...

Shared Library Filesもご覧ください。

とはいえ、Tomcat 自体の展開が複雑になるため、ベスト プラクティスである必要はありません。.warこれは、が実際には「スタンドアロン」ではないことを意味します。また、Web アプリの分離モデルが壊れる可能性があります (以下の注を参照してください)。

あなたが持っているのはビルドの問題です。のビルドを自動化するために、mavenなどのビルド システムを使用できます.war。各プロジェクト A、B、C は、共通のプロジェクト D に依存できます。A、B、または C をビルドすると、ビルド システムは最初に D をビルドし、次に必要に応じてすべてをパッケージ化します。

ノート:

オブジェクトを共有しないように、Web アプリを分離する必要があります。それらのオブジェクト グラフは完全に異なり、各アプリは個別に簡単に再デプロイ (およびガベージ コレクション) できます。クラスを共通のクラスローダーに配置すると、望ましくない副作用が発生する可能性があります。たとえば、共有クラスがシングルトンを実装する場合、すべてのアプリがシングルトン オブジェクトの同じインスタンスを共有することになり、想定される分離モデルと競合します。通常、例外的なケースでアプリ間でオブジェクトを明示的に共有したい場合は、この方法でクラスを共有します。

于 2012-08-16T06:31:34.683 に答える