是的,当您尝试加载已经加载了另一个Web应用程序的库时,会发生这种情况。Tomcat为每个Web应用程序使用单独的类加载器,并且它不允许您通过另一个类加载器多次将同一个本机库加载到JVM
如果任何共享jar文件消耗了您sharedlib.so的JNI,请移动它们。将系统路径添加到sharedlib,
export LD_LIBRARY_PATH=/path/to/whereyourlinklibrary
编写一个像这样的简单类,使您能够在tomcat启动时加载共享库。只需编译此类并将其放入tomcat lib文件夹中
package msm;
public class DLLBootstrapper {
static {
System.loadLibrary("sharedlib");
}
public static void main(String args[]) {
System.out.println("Loaded");
}
}
您现在可以从任何Web应用程序中加载此类(可能在启动侦听器中)
Class.forName("msm.DLLBootstrapper");
好去!