我们在 Tomcat 6.0.35 上的两个 Web 应用程序需要一个库(jar 文件)。jar 文件中的一个类需要本地库才能运行。
正如预期的那样,我遇到了异常
java.lang.UnsatisfiedLinkError:本机库 my-native-library.so 已经在另一个类加载器中加载
如果两个应用程序同时被延迟。
在 jar 文件中,使用静态块加载本机库
静止的 { 尝试 { System.loadLibrary("my-native-library.so"); } 捕捉(UnsatisfiedLinkError e) { e.printStackTrace(); } }
并且使用本机库的类可以使用 xml 进行配置。
jar库是我们自己搭建的搜索引擎,需要的时候可以重新构建。
所以我的问题是我们如何告诉 Tomcat my-native-library.so 已被另一个 Web 应用程序加载,并且该应用程序可以忽略静态块。
编辑:jar 库和 web 应用程序都使用 maven。
谢谢。
编辑:据我了解:
搜索引擎库需要 my-native-library.jar 文件才能构建到 jar 库中。然后搜索引擎 jar 库托管在我们的存储库中,并使用 maven 构建到我们的 Web 应用程序中。当服务器启动时,LD_LIBRARY_PATH 和具有共享库路径的 JAVA_OPTS 被暴露,服务器只能加载一次 my-native-library.so。但是,这两个 Web 应用程序都包含搜索引擎 jar,并且 my-native-library.jar 将位于 WEB_INF/lib 中,并且异常。
要从 WEB_INF/lib 中删除 my-native-library.jar,需要在没有必要依赖项的情况下重建搜索引擎库 (my-native-library.jar)。