我正在做这个项目,我在Java(HttpServlet)中完成了一个Web服务,它使用Hibernate选择,插入和更新信息到数据库中,并将一个对象数组作为JSON返回给连接到JSON端点的人。 / p>
我是在我的本地计算机上创建的,它工作正常。但是,我现在正试图了解它在实际服务器上的工作方式,而不是本地服务器。
所以我通过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个版本(2个版本的Java 7和1个版本的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)
- 我无法在服务器上运行我的项目。
有什么建议吗?
答案 0 :(得分:0)
当我几天前收到此错误时,我的机器上运行了不同版本的JDK和JRE。我通过在Project的Build Path中设置正确的JRE路径以及 Window Preferences-> Java-> Installed JRE&#39>来纠正它。此外,如果你去Tomcat \ bin中的setenv.bat,你可以通过指定这个来指定Tomcat应该使用哪个版本的java:
设置" JRE_HOME =%ProgramFiles%\ Java \ jre1.8.0_121" ,(obv,您的版本可能不同,因此请相应更改)。
我希望能回答你的问题!
编辑:如果你想知道setenv.bat是什么,请参考:https://docs.oracle.com/cd/E40518_01/integrator.311/integrator_install/src/cli_ldi_server_config.html它解释了这个bat文件应包含的内容。
答案 1 :(得分:0)
Hibernate 5.2及更高版本至少需要Java 1.8和JDBC 4.2。
Hibernate 5.1及更早版本至少需要Java 1.6和JDBC 4.0。
当从源代码构建Hibernate 5.1或更早版本时,由于JDK 1.6编译器中的错误,您需要Java 1.7。