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) なしで再構築する必要があります。