我无法重新部署我的spring boot webapp而无需重新启动整个Tomcat服务器。 每当我重新部署时,stacktrace告诉我opencv已经加载到另一个类加载器中并且无法部署。
我正在使用OpenPnP的OpenCV包。 https://github.com/openpnp/opencv
我的webapp中有这个静态方法
static{
nu.pattern.OpenCV.loadShared();
System.out.println("=====================LOADED CV================" + Core.VERSION);
}
由于每次重新部署webapp都崩溃了,我决定将一个单独的程序运行并上传到我的share / apache-tomcat-7.0.52 / lib文件夹并将其作为主要方法运行一次加载< / p>
public class SeparateJarFromWebApp{
public static void main (String args[]){
System.out.println("==============RUNNING MAIN CLASS===========");
nu.pattern.OpenCV.loadShared();
System.out.println("=====================LOADED CV================" + Core.VERSION);
}
}
运行命令后运行我的jar的main方法我收到消息:
You have loaded library /tmp/opencv_openpnp3438207847480914494/nu/pattern/opencv/linux/x86_64/libopencv_java320.so which might have disabled stack guard. The VM will try to fix the stack guard now.
然后我运行我的webapp而不运行任何命令来加载openCv,因为它已经被我的单独jar加载了。但是我在堆栈跟踪中得到了这个:
java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(III)J
我没有想法
答案 0 :(得分:0)
从快速查看代码,看起来它正在初始化一些本机库。除非图书馆允许卸载和加载,否则你在重新部署方面会失败。
你可能能够将opencv部署到tomcat的lib
目录,在那里它至少只会被初始化一次(前提是只有一个webapp这样做),并且您必须准备好任何第二次初始化(例如,当您重新部署Web应用程序时)将失败。
为什么你期望在部署到网络服务器时在类路径上的jar中使用一些随机main
方法,但我不在此。