wake-up-neo.com

Fehler beim Starten von Tomcat, nicht unterstützte Haupt-/Nebenversion, Umgebungsvariablen scheinen jedoch korrekt zu sein

Ich habe ein Problem beim Starten von Tomcat 7 über die Befehlszeile unter Linux, und das Protokoll zeigt Folgendes:

Sep 24, 2012 8:54:10 AM org.Apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the jav
a.library.path: /usr/lib64/jvm/Java-1.6.0-openjdk-1.6.0/jre/lib/AMD64/server:/usr/lib64/jvm/Java-1.6.0-openjdk-1.6.0/jre/lib/AMD64:/u
sr/lib64/jvm/Java-1.6.0-openjdk-1.6.0/jre/../lib/AMD64:/usr/lib64/mpi/gcc/openmpi/lib64:/usr/Java/packages/lib/AMD64:/usr/lib64:/lib6
4:/lib:/usr/lib
Sep 24, 2012 8:54:10 AM org.Apache.Tomcat.util.digester.Digester startElement
SEVERE: Begin event threw error
Java.lang.UnsupportedClassVersionError: pms/security/BCryptRealm : Unsupported major.minor version 51.0
        at Java.lang.ClassLoader.defineClass1(Native Method)
        at Java.lang.ClassLoader.defineClass(ClassLoader.Java:634)
        at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:142)
        at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:277)
        at Java.net.URLClassLoader.access$000(URLClassLoader.Java:73)
        at Java.net.URLClassLoader$1.run(URLClassLoader.Java:212)
        at Java.security.AccessController.doPrivileged(Native Method)
        at Java.net.URLClassLoader.findClass(URLClassLoader.Java:205)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:321)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:266)
        at org.Apache.Tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.Java:144)
        at org.Apache.Tomcat.util.digester.Digester.startElement(Digester.Java:1276)
        at com.Sun.org.Apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.Java:504)
        at com.Sun.org.Apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.Java:182)
        at com.Sun.org.Apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.jav
a:1320)
        at com.Sun.org.Apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScann
erImpl.Java:2732)
        at com.Sun.org.Apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.Java:625)
        at com.Sun.org.Apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.Java:48
8)
        at com.Sun.org.Apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.Java:819)
        at com.Sun.org.Apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.Java:748)
        at com.Sun.org.Apache.xerces.internal.parsers.XMLParser.parse(XMLParser.Java:123)
        at com.Sun.org.Apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.Java:1208)
        at com.Sun.org.Apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.Java:525)
        at org.Apache.Tomcat.util.digester.Digester.parse(Digester.Java:1537)
        at org.Apache.catalina.startup.Catalina.load(Catalina.Java:610)
        at org.Apache.catalina.startup.Catalina.load(Catalina.Java:658)
        at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
        at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
        at Java.lang.reflect.Method.invoke(Method.Java:616)
        at org.Apache.catalina.startup.Bootstrap.load(Bootstrap.Java:281)
        at org.Apache.catalina.startup.Bootstrap.main(Bootstrap.Java:450)

Unter Googeln verstehe ich das erste, was ich einfach ignorieren kann, aber ich habe mich gefragt, ob dies auf die Version von Java hindeutet, die Java zu verwenden versucht, da es ständig Java 6 sagt. Die "Nicht unterstützte Major.Minor-Version 51.0", die ich verstehe, bedeutet, dass ich es habe ein Problem mit Java-Versionen irgendwie. 

Ich habe die Klasse, in der sie Probleme hat (ein benutzerdefiniertes Realm für die Verwendung von BCrypt), mithilfe von ant erstellt. Durch Ausführen von ant -v wird das Kompilieren mit Java 7 ausgeführt, was ich will. Ich habe Java_HOME und JDK_HOME für die Verwendung von Java 7 festgelegt (sie zeigen alle auf den gleichen Ort, soweit ich das beurteilen kann). 

Was fehlt mir noch? Wenn weitere Informationen benötigt werden, lassen Sie es mich wissen. Ich würde mich wirklich über Hinweise freuen, wo ich suchen sollte, was schief läuft. Vielen Dank.

ETA etwas mehr Info pro Fragen in Kommentaren: Ich starte Tomcat über die Befehlszeile. Ich mache ./bin/startup.sh im Tomcat-Basisverzeichnis. Ich habe Tomcat von der Apache-Website heruntergeladen. Ich habe die Kernversion von tar.gz bekommen und diese letzte Nacht ausgepackt (ich hatte vorher nur Version 6 und wollte ein Upgrade durchführen). Auch das ist nicht meine persönliche Maschine. Ich habe nur Benutzerrechte, wenn es darauf ankommt.

11
Maltiriel

Tomcat/bin-Verzeichnis öffnen und Java_HOME-Parameter in catalina.sh ändern

10
Ilya

Ich denke nicht, dass die gegebenen Antworten richtig sind. Die Ausnahme major.minor bedeutet tatsächlich, dass die aktuelle Java-Version, die Sie installiert haben, nicht der Mindestanforderung entspricht. In Ihrem Fehler heißt es insbesondere 51 (dies ist der interne Code für Java SE 7). Um das Problem zu beheben, müssen Sie Java 7 tatsächlich installieren.

3
juancancela

Stellen Sie sicher, dass JRE_HOME auf JRE1.6 (oder höher) eingestellt ist.

Auch nur eine gotcha. Wenn Sie zwei Installationen von Tomcat haben (d. H. Tomcat8 neben Tomcat7), stellen Sie sicher, dass Ihre Variable CATALINA_HOME nicht auf den Pfad von Tomcat8 festgelegt ist. Da dies auch dieses Problem verursachen wird. (Ich habe die Protokolle zuerst übersehen!)

C:\devtools\Apache-Tomcat-7.0.47\bin>set CATALINA_HOME=C:\devtools\Apache-Tomcat-8.0.0-RC5

C:\devtools\Apache-Tomcat-7.0.47\bin>configtest.bat
Using CATALINA_BASE:   "C:\devtools\Apache-Tomcat-8.0.0-RC5"
Using CATALINA_HOME:   "C:\devtools\Apache-Tomcat-8.0.0-RC5"
Using CATALINA_TMPDIR: "C:\devtools\Apache-Tomcat-8.0.0-RC5\temp"
Using JRE_HOME:        "C:\Progra~1\Java\jdk1.6.0_45\jre\"
Using CLASSPATH:       "C:\devtools\Apache-Tomcat-8.0.0-RC5\bin\bootstrap.jar;C:\devtools\Apache-Tomcat-8.0.0-RC5\bin\Tomcat-juli.jar"
Exception in thread "main" Java.lang.UnsupportedClassVersionError: org/Apache/catalina/startup/Bootstrap : Unsupported major.minor version 51.0
        at Java.lang.ClassLoader.defineClass1(Native Method)
        at Java.lang.ClassLoader.defineClassCond(ClassLoader.Java:631)
        at Java.lang.ClassLoader.defineClass(ClassLoader.Java:615)
        at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:141)
        at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:283)
        at Java.net.URLClassLoader.access$000(URLClassLoader.Java:58)
        at Java.net.URLClassLoader$1.run(URLClassLoader.Java:197)
        at Java.security.AccessController.doPrivileged(Native Method)
        at Java.net.URLClassLoader.findClass(URLClassLoader.Java:190)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:306)
        at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:301)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:247)
Could not find the main class: org.Apache.catalina.startup.Bootstrap.  Program will exit.

Sie können CATALINA_HOME mit folgendem Befehl zurücksetzen:

set CATALINA_HOME=
2
Nick Grealy

Ich hatte ein ähnliches Problem und stellte fest, dass ich Tomcat 8.5 mit der jdk-Version 1.6 verwendete, die nicht kompatibel war. Später habe ich die neueste Version 1.8 von JDK installiert und das Problem wurde behoben. Hoffentlich hilft es.

0