web-dev-qa-db-ja.com

Tomcat起動-エラー:メインクラスが見つからないか、ロードできませんでした

RHEL6/Java7でTomcat(7.0.82)を起動しようとすると、ログに次のように表示されます。

Error: Could not find or load main class

ログエントリの最後に特定のクラスが指定されていないことに注意してください。グーグルのほとんどのヒットは、ログエントリの最後にある特定のクラスを示しているようです。

私の場合、これら2つのサーバーを同じように構成しています(AFAIK)。ただし、1つのサーバーが起動したくありません。サーバーは、ダウンロードされたバイナリ、カスタムinitスクリプトなどを使用してインストールされました。これまでに合計3つのサーバー(すべて同じOS、Java)で動作するAnsibleスクリプトを使用しています。

発行されたコマンド:service Tomcat start

サーバーA-機能

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
1
TekiusFanatikus

setenv.shにはエンコードの問題と不適切なEOLがありました。それらが修正されると、物事は期待どおりに稼働しました。

4
TekiusFanatikus

この問題はsetenv.shに直接関連しており、上記で指摘したように、不適切なエンコードとフォーマットの問題が原因です。私の場合、2つのエラーがありました。

  1. VMargsの余分なスペース。例:

Dcatalina.base= /some/locationまたはDcatalina.base =/some/locationまたはDcatalina.base = /some/location

「=」の周りのスペースのために間違っています。

  1. 2番目の問題は行末に関するものでした。 unix/linuxを使用している場合は、setenv.shをunixスタイルの行末で保存する必要があります。 (保存中にNotepad ++またはgeditで実行できます)。一方、Windowsを使用している場合、setenv.batにはWindowsスタイルの行末が必要です。

これを確認する1つの方法は、./setenv.shを実行してsetenv.shを実行することです。 しない出力を表示する場合、フォーマットはfineです。

1
Nikhil Bhatia