【问题标题】:java.lang.UnsupportedClassVersionError for running Jena API on Tomcat 8java.lang.UnsupportedClassVersionError 在 Tomcat 8 上运行 Jena API
【发布时间】:2016-05-07 15:35:46
【问题描述】:

我正在 Tomcat 8 服务器上部署 Spring 应用程序。该应用程序使用来自 maven repository 的 Jena API。当我在浏览器中打开应用程序时,它显示以下消息(当我不使用 Jena API 时,可以毫无问题地打开相同的应用程序):

HTTP 状态 500 - 处理程序处理失败;嵌套异常是 java.lang.UnsupportedClassVersionError: org/apache/jena/query/QueryExecutionFactory:不支持的major.minor 52.0 版(无法加载类 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 在启动服务器时出现在日志消息中:

2016 年 5 月 7 日下午 5:26:11 org.apache.catalina.startup.VersionLoggerListener 日志信息:Java 主页: /usr/lib/jvm/java-7-oracle/jre 2016 年 5 月 7 日下午 5:26:11 org.apache.catalina.startup.VersionLoggerListener 日志信息:JVM 版本:1.7.0_80-b15 2016 年 5 月 7 日下午 5:26:11 org.apache.catalina.startup.VersionLoggerListener 日志信息:JVM 供应商:甲骨文公司

我不确定这是否是问题未解决的可能原因。任何解决方案都受到高度赞赏。

附:我知道java.lang.UnsupportedClassVersionError 的发生是因为编译时JDK 较高而运行时JDK 较低。那么,Jena API 是用较低的 JDK 编译的,我理解正确吗?

【问题讨论】:

  • 请确认使用:echo $JAVA_HOME
  • @victor sosa: /usr/lib/jvm/java-8-openjdk-amd64
  • 哪个 Linux ?检查初始化脚本
  • 请将/etc/init/tomcat.conf设置为env JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64; JAVA_HOME 环境变量应设置为 JDK 的基本路径。

标签: java tomcat jvm jena


【解决方案1】:

实际上据我在您提供的 jar 中看到的,Jena 的主要版本是52,这意味着它已经使用 java 8 编译,我相信您的问题更多是由于您使用 java 7

运行 tomcat

更多关于如何知道一个类的版本,请参考这个answer

要指示Tomcat 使用哪个JDK,您需要通过执行此导出JAVA_HOME=/usr/lib/jvm/java-8-oracleJAVA_HOME 设置为JDK 而不是JRE 的路径。更多详情here

【讨论】:

  • 你知道如何用java 8运行Tomcat吗?正如我在回答中解释的那样,我试图将 Tomcat 的 java 从 /etc/init/tomcat.conf 更改为,但似乎还有另一个配置需要更改。
  • 你需要将 JAVA_HOME 设置为 jdk 的路径而不是 JRE,所以试试这个 env JAVA_HOME=/usr/lib/jvm/java-8-oracle
  • 好的,谢谢。我会检查它,重新编译项目并让你知道它是否有效。
  • 我将/etc/init/tomcat.conf 中的 JAVA_HOME 更改为 /usr/bin/jvm/java-8-oracle´, but when I launch Tomcat from Eclipse, it outputs 2016 年 5 月 7 日下午 7:01:04 org.apache.catalina.startup.VersionLoggerListener 日志信息:Java 主页:/usr/lib/jvm /java-7-oracle/jre`。为什么? (显然问题仍然存在)。
  • 启动“which java”会得到什么?您是否尝试过使用 startup.sh 手动启动它,如我在回答中提供的那样?
猜你喜欢
  • 1970-01-01
  • 2015-03-27
  • 2013-04-24
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多