web-dev-qa-db-ja.com

サポートされていない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に設定しましたが、それでも同じ問題があります。どうすれば解決できますか?

22
user2054833

解決策は、JDK 6用にコンパイルされたデータベースドライバーのコピーを使用することです。

ビルドの変更が機能したため、アプリケーションコードで問題が発生していないようです。 (具体的には、コンプライアンスレベルの変更。(通常の)ビルドパスにJDKを追加しても、違いが生じるとは思わない。)

しかし、もちろん、それはデータベースドライバーに何の違いももたらさないでしょう...あなたはそれをコンパイルしていないからです。


ただし、 ダウンロードページ によると、postgresql-9.2-1002.jdbc4は、Java 6および7と互換性があると想定されています。他の場所からのJAR ...またはJava 7ターゲットでソースからコンパイルすることにより。

[〜#〜] update [〜#〜]-ダウンロードサイトのJARに、バイトコードバージョンが50.0ではないドライバークラスがあることを確認できます51.0。そこから新しいコピーをダウンロードして使用することをお勧めします。

17
Stephen C

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 
20
GKislin

Mavenを使用している場合、中央リポジトリの 9.2-1002-jdbc4バージョン は1.7ターゲットを使用してコンパイルされています。修正されるまで前のバージョンを使用します。

9
chatellier

これは最新のビルドID 1003で解決されたようです:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.2-1003-jdbc4</version>
</dependency>
6
Lukas Eder

最良の方法は、Javaのアプリケーションをコンパイルし、Jre 1.6でコンパイルするアプリケーションがある場合、Jre 1.6の1.6以上のバージョンが必要であり、1つは

または

クラスファイルをコンパイルするだけです。JavaとJust Run on onで使用可能なDefault Jreのapplication.Javaファイルを意味します。

または3番目のオプション。

そのJREをダウンロードし、そのJREバージョンをマシンにインストールします。

1
Krishna

同じ問題を抱えていた

このページで- http://jdbc.postgresql.org/download.html

セクション-現在のバージョン

Jvmのバージョンとpostgres jdbcドライバーに関する詳細は、私が理解するのに役立ちました。

0
athap

この問題と、JDBCドライバーのロードに関するClassNotFoundExceptionの問題が発生しました。解決策は、 http://jdbc.postgresql.org/download.html#jdbcselection からpostgres jarの正しいバージョンを取得することです。 Mavenを使用している場合は、それに応じて依存関係のバージョンを追加します。

0
Abu

Java 6-incompatible Postgresドライバーの代替Java 7-friendlyバージョン(他のほとんどの回答で推奨されているように) 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にプッシュします。

0
Mark Tye