3

Tomcat 6.0.35 の 2 つの Web アプリケーションに必要なライブラリ (jar ファイル) があります。また、jar ファイル内のクラスの 1 つを実行するには、ネイティブ ライブラリが必要です。

予想通り、例外が発生しています

java.lang.UnsatisfiedLinkError: ネイティブ ライブラリ my-native-library.so
すでに別のクラスローダにロードされています

2 つのアプリケーションが同時に表示された場合。

jar ファイル内で、静的ブロックを使用してネイティブ ライブラリが読み込まれます。

静的
{
    試す
    {           
        System.loadLibrary("my-native-library.so");

    キャッチ (UnsatisfiedLinkError e)
    {
        e.printStackTrace();
    }
}

ネイティブ ライブラリを使用するクラスは、xml を使用して構成可能です。

jar ライブラリは弊社が構築した検索エンジンですので、必要に応じて再構築することができます。

そこで私の質問は、my-native-library.so が別の Web アプリケーションによって読み込まれ、このアプリケーションでは静的ブロックを無視できることを Tomcat にどのように伝えることができるかということです。

編集: jar ライブラリと Web アプリケーションの両方が maven を使用しています。

ありがとう。

編集:私の理解では:

検索エンジン ライブラリには、jar ライブラリを構築するための my-native-library.jar ファイルが必要です。次に、検索エンジンの jar ライブラリがリポジトリでホストされ、maven を使用して Web アプリケーションにビルドされます。サーバーが起動すると、LD_LIBRARY_PATH と共有 lib パスを持つ JAVA_OPTS が公開され、サーバーは my-native-library.so を 1 回だけロードできます。ただし、両方の Web アプリケーションには検索エンジン jar が含まれており、my-native-library.jar は WEB_INF/lib にあり、例外があります。

my-native-library.jar を WEB_INF/lib から削除するには、検索エンジン ライブラリを必要な依存関係 (my-native-library.jar) なしで再構築する必要があります。

4

1 に答える 1

1

その場合、Tomcat の共​​有クラスローダーにライブラリをロードして、システムで一度だけロードされるようにします。詳細については、Tomcat クラス ローダーのドキュメントを参照してください。

http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html

于 2013-03-26T10:57:52.877 に答える