2016-12-31 1 views
0

У меня есть проект grails 3, с исходным кодом java в папке src/main/groovy/(как указано here).Tomcat 7 на Linux не может найти Java-класс в Grails 3 War File

код хорошо работает в IntelliJ IDE и при развертывании на Mac OS X El Capitan с Tomcat 7 сервера (протестировано с 7.0.73, 7.0.70 и 7.0.33, установлены как указано here)

Детали сервера (где происходит ошибка)

Однако на Red Hat Linux Server передает команды версии Tomcat следующее (хотя запуска по умолчанию списки страниц версии 7.0.33),

Server version: Apache Tomcat/7.0.70 
Server built: Aug 5 2016 19:24:52 UTC 
Server number: 7.0.70.0 
OS Name:  Linux 
OS Version:  2.6.32-642.6.2.el6.x86_64 
Architecture: amd64 
JVM Version: 1.8.0_111-b14 
JVM Vendor:  Oracle Corporation 

файловые пробеги войны, когда попали в каталог веб-приложения, но киосков на любой странице, которая использует класс Java в SRC/главная/заводной со следующим сообщением об ошибке (в файле журнала catalina.out),

ERROR org.springframework.boot.context.web.ErrorPageFilter - Forwarding to error page from request [/url/] due to exception [Could not initialize class package_name.class_name] 
java.lang.NoClassDefFoundError: Could not initialize class package_name.class_name 

и иногда дает эту ошибку (хотя, казалось, остановилось после установки LD_LIBRARY_PATH на Linux),

ERROR org.springframework.boot.context.web.ErrorPageFilter - Forwarding to error page from request [/url] due to exception [no opencv_java310 in java.library.path] 
java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path 

Несколько вещей, которые делают работу,

  • Код успешно сгенерирован в военный файл
  • При навигации по webapps/war_name/WEB-INF/classes/имя_пакета/файл класса есть И может быть запущен с использованием (из классов/folder not package_name /) java package_name.class_name.

  • Пробная программа, которая использует opencv успешно работает на сервере, поэтому кажется, что собственные библиотеки установлены правильно.

  • Тот же файл войны работает на Mac OS El Capitan с версиями Tomcat 7.0.70, 7.0.73, 7.0.33, однако он использует сценарии оболочки bin, а не службу.

ответ

0

Это потому, что tomcat НЕ соблюдает параметр LD_LIBRARY_PATH на машине Linux. Таким образом, любая тестовая программа, работающая с java ... (включая запуск java tomcat_dir/webapps/war_name/classes/File.class), будет работать, но она все равно будет ломаться под tomcat и жалуется на неспособность импортировать класс. Исправление для этого - игнорировать LD_LIBRARY_PATH (или не использовать Tomcat !, я хочу), а также symlink или скопировать этот файл на один из путей java.library.path.