【发布时间】:2017-04-03 14:10:20
【问题描述】:
我正在做这个项目,我有一个用 Java (HttpServlet) 完成的 Web 服务,它使用 Hibernate 来选择、插入和更新信息到数据库中,并将对象数组作为 JSON 返回给连接到 JSON 端点的任何人。
我在本地计算机上创建了它,它工作正常。不过,我现在正试图看看它如何在实际服务器上而不是在本地运行。
所以我通过 SSH 连接到服务器并将 .war 构建复制到 Tomcat webapps 文件夹,尝试运行它,然后出现以下错误:
javax.servlet.ServletException: Servlet execution threw an exception
root cause java.lang.UnsupportedClassVersionError: org/hibernate/HibernateException : Unsupported major.minor version 52.0 (unable to load class org.hibernate.HibernateException)
因此,我很自然地查看了 StackOverflow 以了解此错误的含义,我发现这是您在一个 Java 版本中创建项目并尝试在劣质 Java 机器上运行该项目时发生的。我确实做到了。
我使用 Java 8 创建了我的项目,并在服务器上的 Java 7 上运行它。所以我更新了服务器以使用 Java 8。但是,在更新到 Java 8 之后,我仍然得到同样的错误。
如果我运行 java -version 命令,我会得到以下结果:
本地计算机:
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
服务器:
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
如您所见,我在本地机器上有 java 1.8.0_121,在服务器上有 java 1.8.0._111。你认为这有可能是问题所在吗?他们不是都是 Java 8 吗?
另外,Tomcat 是如何知道使用哪个 java 的?我在服务器上有 3 个版本(Java 7 的 2 个版本和 Java 8 的一个版本,java 1.8.0_111)。 Tomcat 如何知道使用哪一个?
为了选择使用哪一个,我使用了sudo update-alternatives --config java 命令并从那里选择了 1.8.0_111 版本(服务器是 Ubuntu 12.04)。
问题是 - 我不断收到该错误:java.lang.UnsupportedClassVersionError: org/hibernate/HibernateException : Unsupported major.minor version 52.0 (unable to load class org.hibernate.HibernateException) - 我无法在服务器上运行我的项目。
有什么建议吗?
【问题讨论】: