Tomcat 7 в Linux не может найти класс Java в файле Grails 3 War

У меня есть проект grails 3, с исходным кодом java в папке src/main/groovy/ (как указано здесь ).

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

Сведения о сервере (где происходит ошибка)

Однако на сервере Red Hat Linux команда tomcat version сообщает следующее (хотя на странице запуска по умолчанию указана версия 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

файл war запускается, когда помещен в каталог веб-приложения, но останавливается на любой странице, которая использует класс java в src/main/groovy со следующей ошибкой (в 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

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

  • Код успешно строится в файл war
  • При переходе к webapps/war_name/WEB-INF/classes/ package_name/ class file is there, and can be run using (from the classes/ folder not package_name/) java package_name.имя класса.

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

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

1 ответ

  1. Это происходит потому, что tomcat не уважает параметр LD_LIBRARY_PATH на машине Linux. Поэтому любая тестовая программа запускается с java … (включая запуск java tomcat_dir / webapps/war_name/classes / File.class) будет работать, но он все равно будет ломаться под tomcat и жаловаться на сбой импорта класса. Исправление для этого, чтобы игнорировать LD_LIBRARY_PATH (или не использовать Tomcat!, I wish), и symlink или copy so file to one of the java.библиотека.пути пути.