在 Tomcat 8 上运行 Jena API 时出现 java.lang.UnsupportedClassVersionError

标签 java tomcat jvm jena

我正在 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/

相关文章:

multithreading - Tomcat 6下Servlet中重启Apache2.4

java - Java 中的 file.encoding 系统属性在不同的 JVM 实例中给出不同的结果

java - 为什么将队列实现为循环数组?

java - 我应该使用 null 返回值、检查异常或可能的 null 对象模式来设计以下 API

java - Spring - 如何杀死无限循环

eclipse - 在 Eclipse 上设置外部 Tomcat(使用 CATALINA_HOME/CATALINA_BASE 配置)

用于 REST API (Tomcat) 的 Spring Security Kerberos SSO

java - 优化 Xms/Xmx/XX :MaxPermSize in JVM

java - 为什么要定义Java内存模型?

java - 如何在 firebase Android 中维护用户的存在状态