OpenCV在重新部署时崩溃了webapp

时间:2018-05-29 01:56:11

标签: java linux opencv tomcat

我无法重新部署我的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

我没有想法

1 个答案:

答案 0 :(得分:0)

从快速查看代码,看起来它正在初始化一些本机库。除非图书馆允许卸载和加载,否则你在重新部署方面会失败。

可能能够将opencv部署到tomcat的lib目录,在那里它至少只会被初始化一次(前提是只有一个webapp这样做),并且您必须准备好任何第二次初始化(例如,当您重新部署Web应用程序时)将失败。

为什么你期望在部署到网络服务器时在类路径上的jar中使用一些随机main方法,但我不在此。