web-dev-qa-db-fra.com

Major.minor version 51.0 non supportée (impossible de charger la classe org.postgresql.Driver)

Création d'une application Web utilisant maven et déploiement sur heroku. Tout fonctionne, mais lorsque j'appelle une action utilisant le pilote postgresql-9.2-1002.jdbc4, je reçois:

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

Je sais que le problème est que j'utilise jdk 7 sur mon environnement de développement et qu'une version inférieure tourne sur heroku (du moins, je le crois). Ma première question est la suivante: pourquoi les autres actions ne donnent-elles pas à cette erreur uniquement les actions qui utilisent un pilote postqresql qui donne à ce problème le reste de l'application qui fonctionne parfaitement? L'autre chose que j'ai faite a été de télécharger jdk 6, puis de l'ajouter à mon chemin de génération de projet, puis de configurer la conformité du compilateur Eclipse à la version 1.6, mais j'ai le même problème. Comment puis-je résoudre ça? 

22
user2054833

La solution consiste à utiliser une copie du pilote de base de données compilé pour JDK 6.

Il semble que le code de votre application ne vous cause pas le problème car vos modifications de génération ont fonctionné. (Plus précisément, la modification du niveau de conformité. Je ne pense pas que l'ajout d'un JDK au chemin de génération (normal) fera une différence.)

Mais bien sûr, cela ne fera aucune différence pour le pilote de base de données ... car vous ne le compilez pas.


Cependant, selon la page de téléchargement , postgresql-9.2-1002.jdbc4 est supposé être compatible avec Java 6 et 7. Alors peut-être que vous avez obtenu le fichier JAR ailleurs… ou en le compilant à partir de source avec une cible Java 7.

UPDATE - Je peux confirmer que le fichier JAR du site de téléchargement contient une classe de pilotes dont la version de code intermédiaire est 50.0 et non 51.0. Je vous suggère de télécharger et d'utiliser une nouvelle copie à partir de là.

17
Stephen C

Pour Java 6, utilisez:

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

Pour Java 7, utilisez:

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

Si vous utilisez maven, la version 9.2-1002-jdbc4 du référentiel central a été compilée à l'aide de la cible 1.7. Utilisez la version précédente jusqu'à ce que cela soit corrigé.

9
chatellier

Il semble que cela ait été résolu avec la dernière version ID 1003:

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

Le meilleur moyen est d’installer une version supérieure de Java avec laquelle votre application compile et suppose que si j’ai une application avec compiler avec Jre 1.6, j’ai besoin de la version 1.6 ou supérieure de Jre 1.6 et qu’une chose est que 

ou 

Juste compiler votre fichier de classe, je veux dire votre fichier application.Java avec Jre par défaut que vous avez disponible avec Java et Just Run sur le même.

ou troisième option.

Téléchargez ce JRE et installez cette version dans votre ordinateur.

1
Krishna

Avait le même problème

Sur cette page - http://jdbc.postgresql.org/download.html

Section - Version actuelle

Les détails sur les versions de jvm et les pilotes postgres jdbc m'ont aidé à comprendre.

0
athap

J'ai rencontré ce problème et également la ClassNotFoundException pour le problème de chargement du pilote JDBC. La solution consiste à obtenir la version correcte du fichier postgres à partir de http://jdbc.postgresql.org/download.html#jdbcselection . Si vous utilisez Maven, ajoutez la version de votre dépendance en conséquence. 

0
Abu

L’autre solution consiste à demander à Heroku d’utiliser Java 7 pour compiler et exécuter votre application en remplaçant votre pilote Postgres compatible Java 6 par une autre version compatible avec Java 7. Si vous utilisez JDK 7 pour le développement, comme vous le dites, cela pourrait aider à éviter d'autres incompatibilités.

Pour ce faire, suivez ces instructions sur Heroku Devcenter. Voici un résumé:

  1. Créez un fichier nommé system.properties dans le répertoire de base de votre application.
  2. Ajoutez la propriété Java.runtime.version=1.7 au fichier, c’est-à-dire:

    Java.runtime.version=1.7
    
  3. Validez le fichier system.properties et appuyez sur Heroku.

0
Mark Tye