我正在 Tomcat 8 服务器上部署 Spring 应用程序。该应用程序使用此 maven repository 中的 Jena API 。当我在浏览器中打开应用程序时,它显示以下消息(当我不使用 Jena API 时可以打开相同的应用程序,没有任何问题):
HTTP Status 500 - Handler processing failed; nested exception is java.lang.UnsupportedClassVersionError: org/apache/jena/query/QueryExecutionFactory : Unsupported major.minor version 52.0 (unable to load class org.apache.jena.query.QueryExecutionFactory)
我尝试通过更改 Tomcat 8 的 Java 版本来解决此问题。我打开 sudo nano/etc/init/tomcat.conf
并更改了 JAVA_HOME:
env JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre
然后我重新启动了 Tomcat 8 服务器并重新部署了我的应用程序,但同样的问题仍然存在。事实上,我注意到由于某种原因,启动服务器时 JRE 7 出现在日志消息中:
May 07, 2016 5:26:11 PM org.apache.catalina.startup.VersionLoggerListener log INFO: Java Home: /usr/lib/jvm/java-7-oracle/jre May 07, 2016 5:26:11 PM org.apache.catalina.startup.VersionLoggerListener log INFO: JVM Version: 1.7.0_80-b15 May 07, 2016 5:26:11 PM org.apache.catalina.startup.VersionLoggerListener log INFO: JVM Vendor: Oracle Corporation
我不确定这是否是问题未得到解决的可能原因。任何解决方案都受到高度赞赏。
附注我知道 java.lang.UnsupportedClassVersionError
发生的原因是编译时的 JDK 较高,而运行时的 JDK 较低。那么,我是否正确理解 Jena API 是使用较低版本的 JDK 编译的?
最佳答案
实际上,据我在您提供的jar中看到,Jena
的主要版本是52
,这意味着它是用java编译的8,我相信你的问题更多是由于你使用java 7运行tomcat
更多关于如何了解类版本的信息,请引用这个answer
要指示 Tomcat
使用哪个 JDK
,您需要将 JAVA_HOME
设置为 JDK
的路径> 通过执行此导出JAVA_HOME=/usr/lib/jvm/java-8-oracle
,而不是JRE
。更多详情here
关于在 Tomcat 8 上运行 Jena API 时出现 java.lang.UnsupportedClassVersionError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37090401/