2016-03-03 3 views
0

У меня есть приложение для загрузки Spring, упакованное как WAR, которое использует OpenCV для обработки некоторых изображений, и я хотел бы запустить его на Elastic Beanstalk (среда Tomcat). Есть ли способ упаковать его с родными библиотеками Opencv?Запуск весеннего ботинка с Opencv на эластичном бобовом стебле

Все работает отлично на моей локальной машине, где я имею следующую конфигурацию:

  • Tomcat 8 работает в Eclipse, с моим приложением развернутом к нему.
  • OpenCV 3.1 установлена ​​на моем компьютере
  • opencv_310.jar помещен в src/webapp/WEB-INF/lib
  • OpenCV добавлены в путь сборки Java (path/to/opencv/build/bin)
  • Tomcat работает с VM аргументом -Djava.library.path=path/to/opencv/opencv/build/lib

Эта установка работает отлично и я даже в состоянии упаковать его с maven clean pakcage.

Однако, если я хочу развернуть на Amazon Elastic Beanstalk, я просто не могу предположить, что Opencv будет установлен на этой машине (это не так), поэтому мне нужно как-то упаковать его в мой WAR-файл, содержатся.

Когда я раскрываю мой WAR в УДР, я всегда получаю

java.lang.UnsatisfiedLinkError: no opencv_java300 in java.library.path 

при загрузке OpenCV с System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Я нашел некоторые учебники по этому вопросу для archaic versions из OpenCV, но я не могу показаться, чтобы выяснить, как сделайте это легко. Я был бы рад за любые советы, потому что я давно застрял на этом.

ответ

0

Я решил проблему, используя этот отличный Github project, который обеспечивает привязки Java OpenCV, упакованные в собственные библиотеки и предоставляемые как зависимость от Maven.

Существует также новый fork этого проекта с более современной версией OpenCV, с которой я, вероятно, переключусь. Он поддерживает OpenCV 2.4.10, который является шагом назад от версии 3.1, которую я использовал, но он делает все, что я ожидал от него.

0

При запуске сервера Tomcat, вы можете пройти путь к родной библиотеки, так что они будут предварительно загружены, как это:

java -Djava.library.path=... 

другой путь был бы поместить библиотеки в папку, где основной jar (jar, из которого вы запускаете tomcat) из tomcat.

+0

Я делаю это на localhost, когда мои библиотеки установлены на моей машине. Не могли бы вы привести пример настройки, как это сделать на эластичном бобовом стебле без установленного opencv (где поставить исходную библиотеку в военный файл и как ссылаться на нее). Я не могу сделать этот шаг правильным ... – Smajl

+0

Вам не следует вставлять родные библиотеки в войну (если вы не используете какую-либо библиотеку, чтобы извлекать их и динамически загружать, например, с помощью birdJ). Вы можете передать их как аргумент VM, на котором работает tomcat, или вы можете поместить их в ту же папку, где находится jar running tomcat. –

+0

Но есть ли способ упаковать и развернуть приложение, чтобы он не зависел от родных библиотек? Я не уверен, как справиться с этим на ELB ... – Smajl

Смежные вопросы