3

概要

Linux + tomcat5.5 にデプロイされた webapps がすべての/usr/share/java/jar を自動的に使用/表示することは可能ですか?

詳細

私はUbuntu用のJava Webアプリケーションをパッケージ化しています(ただし、質問はLinuxベースのディストリビューションに関連しています)。Tomcatに依存するようにします。

コンテキスト記述子 (xml ファイル) を/usr/share/tomcat5.5/conf/Catalina/localhost/配置して、アプリをデプロイします。ここに Web ディレクトリがあります: /usr/share/<appname>/web、システム ( ) にインストールされている Java jar ライブラリをアプリで使用できるようにするにはどうすればよい/usr/share/javaですか?

カスタム jar をdir/usr/share/java -> <webdir>/WEB-INF/libに配置する必要があるため、単に symlink することはできません。lib

悪い解決策

これまでに見つけた解決策は、必要な各 jar を にシンボリック リンクすることです<webdir>/WEB-INF/lib/

多くのjarをシンボリックリンクする必要があり、さらに悪いことに、直接の依存ライブラリ(jar)が必要とする(など)すべてのjarをシンボリックリンクする必要があるため、これはあまり良くありません。私の直接の依存ライブラリが必要なjarのリストを変更した場合、そのシンボリックリンクを維持する必要があります。

4

4 に答える 4

2

Tomcat classloading documentationによると、すべての Tomcat アプリで利用できる共有ライブラリを $CATALINA_BASE/shared/lib ライブラリに配置する必要があります。 /usr/share/java から $CATALINA_BASE/shared/lib へ。

しかし、同じドキュメントを誤解していなければ、Tomcat は起動時にシステム全体の CLASSPATH 変数の内容をクラスローダーで利用できるようにするので、ディレクトリ -- /usr/share/java -- がシステム全体の CLASSPATH に含まれている場合変数、それも機能するはずです。ただし、これを行ったことはありません。$CATALINA_BASE/shared/lib のコンテンツを Tomcat 全体で利用できるようにする Tomcat の方法は、常に完璧に機能してきました。

于 2008-09-22T14:42:14.083 に答える
1

entzik の回答により、次の解決策にたどり着きました。

修正された「悪い解決策」を使用します (質問を参照)。

変更は次のとおりです。

  1. すべての依存関係について特定のパッケージ バージョンに依存する (deb のパッケージ化中に「制御」ファイルに影響する)
    例: libcommons-io-javaだけではなく、libcommons -io-java ( = 1.3.1)
  2. 「一般化された」ものではなく、「/usr/share/java」内の実際の jar ファイルへのシンボリック リンクの
    例:
    webdir/WEB-INF/lib/commons-io.jar -> /usr/share/java/commons-io-1.3。 1.jar
    であり、
    webdir/WEB-INF/lib/commons-io.jar ではありません -> /usr/share/java/commons-io.jar

この変更により、管理者が新しいバージョンのライブラリ (commons-io など) をインストールした場合に webapp が破損しないことが保証されます。

欠点は、このアプローチでは明らかに 1 つのアプリでのみ使用されるバージョンのライブラリでシステムが膨張し、バージョンの競合により他のアプリケーション/ライブラリがインストールできないという問題が発生する可能性があることです。ライブラリについて話している場合、潜在的な問題はどちらも小さいと思います。

于 2008-09-22T17:24:57.203 に答える
0

2 つのオプションがあります。1 つはクラスローダがすべての Java プログラムにライブラリを提供できるようにする方法で、もう 1 つはクラスローダがすべての Tomcat コンテキストにライブラリを提供できるようにする方法です。

シンボリック リンクを /usr/lib/jvm/java-1.5.0-sun-1.5.0.11/jre/lib に追加して (このパスで別のバージョンを指定する必要がある場合があることに注意してください)、すべての Java プログラムがこれらのライブラリにアクセスできるようにするか、すべての Tomcat コンテキストからアクセスできるように、それらを var/lib/tomcat5.5/shared/libs にある Tomcat の共​​有ライブラリに追加します (バージョン番号は異なる場合があります)。

また、これらのディレクトリの場所は Ubuntu の「Feisty」から取得したものであることにも注意してください。

于 2008-09-22T14:49:40.417 に答える
-2

あなたはそれをすべきではありません。Java EE アプリケーションは、自己完結型であり、コンテナーによって提供されるもの以外のデプロイメント パッケージの外部のリソースに依存しないと想定されています。したがって、そのディレクトリから必要なライブラリを取得し、それを war または ear パッケージに追加する必要があります。

これにより、アプリケーションはどこにデプロイしても同じように動作し、/usr/share/java... 内のライブラリのバージョンが予期せず変更されることはありません。

于 2008-09-22T15:21:11.277 に答える