2013-04-15 3 views
22

Создал веб-приложение с помощью maven и развернул его на heroku. Все работает найти, но когда я называю действие, которое использует PostGreSQL-9.2-1002.jdbc4 драйвер я получаю:Unsupported major.minor version 51.0 (не удалось загрузить класс org.postgresql.Driver)

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, но даже тогда у меня такая же проблема. Как я могу это решить?

+0

Действительно ли вы перестраивали или компилировали свой проект или просто перезапускали его с меняющейся конфигурацией? –

+0

Да, я его перестрою. – user2054833

ответ

17

Решение использовать копию драйвера базы данных, скомпилированные для JDK 6.

кажется, что вы не получаете проблему с кодом приложения, потому что ваши изменения сборки работали. (В частности, изменение уровня соответствия. Я не думаю, что добавление JDK к (регулярному) пути сборки будет иметь значение.)

Но, конечно, это не повлияет на драйвер базы данных. .. потому что вы не компилируете это.


Однако, по словам the download page, PostgreSQL-9.2-1002.jdbc4 должен быть совместим с Java 6, а также 7. Так что, может быть, вы получили от JAR где-то еще ... или путем компиляции из источника с целью Java 7.

ОБНОВЛЕНИЕ - Я могу подтвердить, что JAR на сайте загрузки имеет класс драйвера, версия байт-кода которого 50.0 не 51.0. Я предлагаю вам скачать и использовать новую копию оттуда.

+1

Или получите исходный код (если он доступен) для драйвера и скомпилируйте его самостоятельно с целевой java 6. –

9

Если вы используете maven, 9.2-1002-jdbc4 version на центральном репозитории был скомпилирован с использованием 1.7 цели. Используйте предыдущую версию до тех пор, пока она не будет исправлена.

+0

Только для справки: предыдущей версией в центральном репозитории будет postgresql: postgresql: 9.1-901-1.jdbc4 (обратите внимание на другая группаId) –

6

Похоже, что это была решена с последней сборки ID 1003:

<dependency> 
    <groupId>org.postgresql</groupId> 
    <artifactId>postgresql</artifactId> 
    <version>9.2-1003-jdbc4</version> 
</dependency> 
20

Для 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 
+0

Это работает, спасибо! (Мой complier равен 1.6, и я использую postgresql-9.2-1004-jdbc4.jar) – Zhiya

0

I столкнулись с этой проблемой, а также ClassNotFoundException для загрузки проблемы драйвера JDBC. Решение состоит в том, чтобы получить правильную версию банки postgres от http://jdbc.postgresql.org/download.html#jdbcselection. Если вы используете Maven, соответствующим образом добавьте версию своей зависимости.

1

Лучший способ установить более позднюю версию Явы, что ваше приложение Компиляция с и предположим, если у меня есть приложение с компилировать с JRE 1.6 тогда мне нужно 1,6 или выше версия JRE 1.6 и я одна вещь, что

или

Просто скомпилируйте свой файл класса. Я имею в виду ваш файл application.java с по умолчанию Jre, который у вас есть с java и Just Run на том же самом.

или третий вариант.

Загрузите эту JRE и установите эту версию JRE на свой компьютер.

0

Альтернатива замене вашего Java 6-несовместимого драйвера Postgres для альтернативной версии с поддержкой Java 7 (как рекомендовано большинством других ответов) заключается в том, чтобы Heroku использовал Java 7 для компиляции и запуска вашего приложения. Если вы используете JDK 7 для разработки, это, как вы говорите, поможет избежать других несовместимостей.

Для этого следуйте these instructions на Heroku Devcenter. Вот резюме:

  1. Создайте файл с именем system.properties в базовом каталоге приложения.
  2. Добавить свойство java.runtime.version=1.7 в файл, т.е .:

    java.runtime.version=1.7 
    
  3. Commit файл system.properties и нажмите на Heroku.

0

Если бы тот же вопрос

На этой странице - http://jdbc.postgresql.org/download.html

Раздел - Текущая версия

Подробная информация о Jvm версиях и Postgres драйверов JDBC помогли мне понять это.

Смежные вопросы