Неподдерживаемая версия major.minor 51.0 (не удалось загрузить класс org.postgresql.Driver)
Создал веб-приложение с помощью maven и развернул его на герою. Все работает, но когда я вызываю действие, которое использует драйвер 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 в моей среде разработки, а более низкая версия работает на героку (по крайней мере, я так думаю). Мой первый вопрос: почему другие действия не дают этой ошибки, только действия, которые используют драйвер postqresql, дают эту проблему, остальная часть приложения работает нормально? Другая вещь, которую я сделал, - загрузить jdk 6, а затем добавить ее в мой путь построения проекта, а затем настроить соответствие компилятора eclipse 1.6, но даже тогда у меня такая же проблема. Как я могу это решить?
Ответы
Ответ 1
Решение заключается в использовании копии драйвера базы данных, которая скомпилирована для JDK 6.
Кажется, что у вас не проблема с кодом приложения, потому что сработали изменения сборки. (В частности, изменение уровня соответствия. Я не думаю, что добавление JDK к (регулярному) пути сборки будет иметь значение.)
Но, конечно, это не будет иметь никакого значения для драйвера базы данных... потому что вы не компилируете это.
Однако, согласно странице загрузки, postgresql-9.2-1002.jdbc4 должен быть совместим с Java 6, а также с 7. Так что, возможно, вы получили JAR из другого места... или путем компиляции из источника с целью Java 7.
UPDATE. Я могу подтвердить, что JAR на сайте загрузки имеет класс драйвера, версия байт-кода которого 50.0 не 51.0. Я предлагаю вам скачать и использовать новую копию оттуда.
Ответ 2
Для 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
Ответ 3
Если вы используете maven, 9.2-1002-jdbc4 версия в центральном репозитории была скомпилирована с использованием 1.7 цели. Используйте предыдущую версию до тех пор, пока она не будет исправлена.
Ответ 4
Кажется, что это было разрешено с помощью последнего идентификатора сборки 1003:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.2-1003-jdbc4</version>
</dependency>
Ответ 5
Лучший способ - установить более высокую версию java, с которой связано ваше приложение. Предположим, что если у меня есть приложение с компиляцией с Jre 1.6, мне нужна 1.6 или более высокая версия Jre 1.6, и одна вещь заключается в том, что
или
Просто скомпилируйте свой файл класса. Я имею в виду ваш файл application.java со стандартным Jre, который у вас есть с java и Just Run на том же самом.
или третий вариант.
Загрузите эту JRE и установите эту версию JRE на свой компьютер.
Ответ 6
Я столкнулся с этой проблемой, а также ClassNotFoundException для загрузки проблемы драйвера JDBC. Решение состоит в том, чтобы получить правильную версию баннера postgres из http://jdbc.postgresql.org/download.html#jdbcselection. Если вы используете Maven, соответствующим образом добавьте версию своей зависимости.
Ответ 7
Альтернативой замене вашего Java 6-несовместимого драйвера Postgres на альтернативную версию, совместимую с Java 7 (как рекомендовано большинством других ответов), является использование Heroku Java 7 для компиляции и запуска вашего приложения. Если вы используете JDK 7 для разработки, это, как вы говорите, поможет избежать других несовместимостей.
Для этого следуйте этих инструкций на Heroku Devcenter. Здесь резюме:
- Создайте файл с именем
system.properties
в базовом каталоге приложения.
-
Добавьте свойство java.runtime.version=1.7
в файл, то есть:
java.runtime.version=1.7
-
Зафиксируйте файл system.properties
и нажмите на Heroku.
Ответ 8
Имел ту же проблему
На этой странице http://jdbc.postgresql.org/download.html
Раздел - Текущая версия
Детали о версиях jvm и драйверах jdbc postgres помогли мне разобраться.