Linux 启动 Tomcat 时出错,不受支持的主要/次要版本,但环境变量似乎正确
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12567956/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Error when starting Tomcat, unsupported major/minor version, environment variables seem correct though
提问by Maltiriel
I'm having a problem starting Tomcat 7 from the command line on Linux, and the log shows this:
我在 Linux 上从命令行启动 Tomcat 7 时遇到问题,日志显示:
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.accessC:\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.accessset CATALINA_HOME=
0(URLClassLoader.java:58)
at java.net.URLClassLoader.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.
0(URLClassLoader.java:73)
at java.net.URLClassLoader.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)
From googling I understand the first bit I can just ignore, but I was wondering if that's indicative of the version of Java it's trying to use, since it keeps saying Java 6. The "Unsupported major.minor version 51.0" I understand means I have a problem with Java versions somehow.
通过谷歌搜索,我明白了我可以忽略的第一点,但我想知道这是否表明它尝试使用的 Java 版本,因为它一直说 Java 6。“不支持的主要版本 51.0”我理解意味着我有Java 版本的问题不知何故。
I built the class it's having problems with (a custom realm to use BCrypt) using ant, and running ant -v shows it's compiling with Java 7, which is what I want. I've set JAVA_HOME and JDK_HOME to use Java 7 as well (they're all pointing to the same place as far as I can tell).
我使用 ant 构建了它有问题的类(使用 BCrypt 的自定义领域),并且运行 ant -v 显示它正在使用 Java 7 进行编译,这正是我想要的。我已经将 JAVA_HOME 和 JDK_HOME 设置为使用 Java 7(据我所知,它们都指向同一个地方)。
What else am I missing? If more info is needed let me know. I'd really appreciate any pointers on where I should look for whatever is going wrong. Thanks.
我还缺少什么?如果需要更多信息,请告诉我。我真的很感激任何关于我应该在哪里寻找任何问题的指示。谢谢。
ETA a little more info per questions in comments: I'm starting tomcat via the command line. I just do ./bin/startup.sh from the tomcat base directory. I downloaded tomcat from the Apache website. I got the core tar.gz version and unpacked it just last night (I only had version 6 before and wanted to upgrade). Also this isn't my personal machine; I only have user rights, if that matters.
ETA 评论中每个问题的更多信息:我正在通过命令行启动 tomcat。我只是从 tomcat 基本目录中执行 ./bin/startup.sh 。我从Apache 网站下载了 tomcat 。昨晚刚拿到核心tar.gz版本,解压了(之前只有6版本,想升级)。这也不是我的个人机器;如果这很重要,我只有用户权限。
采纳答案by Ilya
Open tomcat/bin
directory and change JAVA_HOME
parmater in catalina.sh
打开tomcat/bin
目录并更改JAVA_HOME
参数catalina.sh
回答by juancancela
I dont think that given responses are correct. In fact, major.minor exception means that the current Java version you have installed does not match the minimum requirement. In particular, in your error says 51 (which is the internal code for Java SE 7). So to fix the issue you actually need to install Java 7.
我不认为给出的回答是正确的。实际上,major.minor 异常意味着您安装的当前 Java 版本不符合最低要求。特别是,在您的错误中显示 51(这是 Java SE 7 的内部代码)。所以要解决这个问题,你实际上需要安装 Java 7。
回答by Nick Grealy
Ensure the JRE_HOME is set to JRE1.6 (or greater).
确保 JRE_HOME 设置为 JRE1.6(或更高版本)。
Also, just a gotcha. If you have two installations of Tomcat (i.e. Tomcat8 alongside Tomcat7), make sure your CATALINA_HOME variable isn't set to the Tomcat8's path. As this will also cause this issue. (I overlooked the logs at first!)
此外,只是一个问题。如果您安装了两个 Tomcat(即 Tomcat8 和 Tomcat7),请确保您的 CATALINA_HOME 变量未设置为 Tomcat8 的路径。因为这也会导致这个问题。(一开始我忽略了日志!)
##代码##Fyi, you can unset CATALINA_HOME by using:
仅供参考,您可以使用以下方法取消设置 CATALINA_HOME:
##代码##回答by Navin Prakash Das
I faced the similar issue and found out that I was using Tomcat 8.5 with the jdk version 1.6 which was not compatible . Later on I installed latest JDK version 1.8 and issue was resolved.Hope it helps.
我遇到了类似的问题,发现我使用的是 Tomcat 8.5 和不兼容的 jdk 1.6 版。后来我安装了最新的 JDK 1.8 版,问题解决了。希望它有所帮助。