不支持的major.minor版本51.0(无法加载类org.postgresql.Driver)

使用maven创建了一个Web应用程序并将其部署在heroku上。 一切正常,但当我调用一个使用postgresql-9.2-1002.jdbc4驱动程序的动作时,我得到:

java.lang.UnsupportedClassVersionError: org/postgresql/Driver : Unsupported major.minor version 51.0 (unable to load class org.postgresql.Driver) 

我知道问题是我在我的开发环境中使用jdk 7并且在heroku上运行了较低版本(至少我是这么认为)。 我的第一个问题是,为什么其他操作不会给出此错误,只有使用postqresql驱动程序的操作才会出现此问题,其他应用程序的工作正常? 我做的另一件事是下载jdk 6,然后将其添加到我的项目构建路径,然后将eclipse编译器符合性配置为1.6,但即便如此,我也有同样的问题。 我怎么解决这个问题?

解决方案是使用为JDK 6编译的数据库驱动程序的副本。

您似乎没有遇到应用程序代码的问题,因为您的构建更改有效。 (特别是对合规性级别的更改。我不认为在(常规)构建路径中添加JDK会产生任何不同。)

但是,当然,这对数据库驱动程序没有任何影响……因为你没有编译它。


但是,根据下载页面 ,postgresql-9.2-1002.jdbc4应该与Java 6以及7兼容。所以也许你已经从其他地方获得了JAR ……或者通过Java从源代码编译7目标。

更新 – 我可以确认下载站点上的JAR有一个Driver类,其字节码版本是50.0而不是51.0。 我建议你从那里下载并使用新的副本。

对于java 6使用:

 postgresql-9.2-1004-jdbc4.jar postgresql-9.3-1100-jdbc4.jar 

对于java 7使用:

 postgresql-9.2-1004-jdbc41.jar postgresql-9.3-1100-jdbc41.jar 

如果您使用maven,则使用1.7目标编译中央存储库上的9.2-1002-jdbc4版本 。 使用以前的版本,直到它被修复。

似乎已使用最新的构建ID 1003解决了这个问题:

  org.postgresql postgresql 9.2-1003-jdbc4  

最好的方法是安装你的Application Compile with的更高版本的java,并假设我有使用Jre 1.6编译的应用程序然后我需要1.6或更高版本的Jre 1.6并且你有一件事是

要么

只是编译你的类文件我的意思是你的application.java文件与默认Jre你可以使用java和Just Run相同。

或第三选择。

下载该JRE并在您的计算机中安装该JRE版本。

我遇到了这个问题,还有用于加载JDBC驱动程序问题的ClassNotFoundException。 解决方案是从http://jdbc.postgresql.org/download.html#jdbcselection获取正确版本的postgres jar。 如果您使用的是Maven,请相应地添加您的依赖项版本。

替换Java 6兼容的Postgres驱动程序替代Java 7友好版本(如大多数其他答案所推荐的)是让Heroku使用Java 7编译和运行您的应用程序。 如果您正在使用JDK 7进行开发,正如您所说,这可能有助于避免其他不兼容性。

为此,请按照Heroku Devcenter上的这些说明进行操作 。 这是一个总结:

  1. 在应用程序的基目录中创建名为system.properties的文件。
  2. 将属性java.runtime.version=1.7添加到文件中,即:

     java.runtime.version=1.7 
  3. 提交system.properties文件并推送到Heroku。

有同样的问题

在此页面 – http://jdbc.postgresql.org/download.html

部分 – 当前版本

有关jvm版本和postgres jdbc驱动程序的详细信息帮助我弄明白了。