Запуск Tomcat - ошибка: не удалось найти или загрузить основной класс
Когда я пытаюсь запустить Tomcat (7.0.82) на RHEL6/Java7, журналы будут отображать это:
Error: Could not find or load main class
Обратите внимание, что в конце записи журнала не указан конкретный класс. Похоже, что большинство просмотров в Google указывают на определенный класс в конце записи журнала.
В моем случае эти два сервера настроены одинаково (AFAIK). Однако один сервер не хочет запускаться. Сервер был установлен с использованием загруженных двоичных файлов, пользовательского сценария инициализации и т. Д.; используя сценарий Ansible, который до сих пор работал на 3 серверах (все те же ОС, Java).
Выданная команда: service tomcat start
Сервер А - Работает
Using CATALINA_BASE: /opt/tomcat/current
Using CATALINA_HOME: /opt/tomcat/current
Using CATALINA_TMPDIR: /opt/tomcat/current/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/current/bin/bootstrap.jar:/opt/tomcat/current/bin/tomcat-juli.jar
Tomcat started.
Сервер B - нет (хотя указывает "запущен")
Using CATALINA_BASE: /opt/tomcat/current
Using CATALINA_HOME: /opt/tomcat/current
Using CATALINA_TMPDIR: /opt/tomcat/current/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/current/bin/bootstrap.jar:/opt/tomcat/current/bin/tomcat-juli.jar
Tomcat started.
Обновление № 1
Выход из catalina.out
[me@server tomcat]$ cat /var/log/tomcat/catalina.out
Error: Could not find or load main class
Обновление № 2
Выход из version.sh
а также configtest.sh
version.sh
[me@server bin]$ ./version.sh
Using CATALINA_BASE: /opt/tomcat/apache-tomcat-7.0.82
Using CATALINA_HOME: /opt/tomcat/apache-tomcat-7.0.82
Using CATALINA_TMPDIR: /opt/tomcat/apache-tomcat-7.0.82/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/apache-tomcat-7.0.82/bin/bootstrap.jar:/opt/tomcat/apache-tomcat-7.0.82/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.82
Server built: Sep 29 2017 12:23:15 UTC
Server number: 7.0.82.0
OS Name: Linux
OS Version: 2.6.32-696.13.2.el6.x86_64
Architecture: amd64
JVM Version: 1.7.0_45-b18
JVM Vendor: Oracle Corporation
configtest.sh
[me@server bin]$ ./configtest.sh
Using CATALINA_BASE: /opt/tomcat/apache-tomcat-7.0.82
Using CATALINA_HOME: /opt/tomcat/apache-tomcat-7.0.82
Using CATALINA_TMPDIR: /opt/tomcat/apache-tomcat-7.0.82/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/apache-tomcat-7.0.82/bin/bootstrap.jar:/opt/tomcat/apache-tomcat-7.0.82/bin/tomcat-juli.jar
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version: Apache Tomcat/7.0.82
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built: Sep 29 2017 12:23:15 UTC
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number: 7.0.82.0
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name: Linux
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version: 2.6.32-696.13.2.el6.x86_64
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture: amd64
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home: /usr/java/jre1.7.0_45
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version: 1.7.0_45-b18
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor: Oracle Corporation
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE: /opt/tomcat/apache-tomcat-7.0.82
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME: /opt/tomcat/apache-tomcat-7.0.82
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.endorsed.dirs=/opt/tomcat/apache-tomcat-7.0.82/endorsed
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=/opt/tomcat/apache-tomcat-7.0.82
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=/opt/tomcat/apache-tomcat-7.0.82
Nov 30, 2017 10:13:59 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.io.tmpdir=/opt/tomcat/apache-tomcat-7.0.82/temp
Nov 30, 2017 10:13:59 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Nov 30, 2017 10:14:00 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Nov 30, 2017 10:14:00 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Nov 30, 2017 10:14:00 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1881 ms
2 ответа
setenv.sh
были проблемы с кодировкой и неправильной EOL. Как только они были исправлены, все заработало, как и ожидалось.
Эта проблема напрямую связана с вашим setenv.sh и, как указано выше, связана с неправильными проблемами кодирования и форматирования. В моем случае было две ошибки:
- Лишние пробелы в VMargs. Пример:
Dcatalina.base= /some/location
или жеDcatalina.base =/some/location
или жеDcatalina.base = /some/location
неправильно из-за пробелов вокруг '='.
- Вторая проблема была связана с окончаниями строк. Убедитесь, что если вы используете unix/linux, ваш setenv.sh должен быть сохранен с окончанием строки в стиле Unix. (Может быть сделано в Notepad++ или gedit при сохранении). Принимая во внимание, что если вы используете Windows, ваш setenv.bat должен иметь оконные стили в конце строки.
Один из способов проверить это - попытаться запустить setenv.sh, выполнив ./setenv.sh
, Если он не показывает никакого вывода, ваше форматирование в порядке.