有两个基于Tomcat 6.0.35的Web应用程序需要一个库(jar文件)。并且其中一个类在运行时需要本地库。
如果同时部署了两个应用程序,则会出现异常:
java.lang.UnsatisfiedLinkError: Native Library my-native-library.so already loaded in another classloader 在jar文件中,本地库是使用静态块加载的,并且使用xml配置了使用本地库的类。
这个库是我们构建的搜索引擎,因此我们可以重新构建它。我的问题是如何告诉Tomcat另一个Web应用程序已经加载了my-native-library.so,以便该应用程序可以忽略静态块。
根据我的理解:
搜索引擎库需要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)。
如果同时部署了两个应用程序,则会出现异常:
java.lang.UnsatisfiedLinkError: Native Library my-native-library.so already loaded in another classloader 在jar文件中,本地库是使用静态块加载的,并且使用xml配置了使用本地库的类。
这个库是我们构建的搜索引擎,因此我们可以重新构建它。我的问题是如何告诉Tomcat另一个Web应用程序已经加载了my-native-library.so,以便该应用程序可以忽略静态块。
根据我的理解:
搜索引擎库需要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)。