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