2013-04-15 21 views
22

Creata un'app Web utilizzando Maven e l'ha distribuita su heroku. Tutto funziona a trovare, ma quando chiamo un'azione che utilizza il driver PostgreSQL-9.2-1002.jdbc4 ottengo:Major.minor non supportato versione 51.0 (impossibile caricare la classe org.postgresql.Driver)

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

So che il problema è che sto usando JDK 7 sul mio ambiente di sviluppo e una versione più bassa sta correndo su heroku (almeno io la penso così). La mia prima domanda è, perché le altre azioni non danno questo errore, solo le azioni che usano il driver postqresql danno questo problema, il resto dell'app funziona perfettamente? L'altra cosa che ho fatto è stata scaricare jdk 6 e poi aggiunto al mio percorso di costruzione del progetto, quindi configurare la conformità del compilatore di Eclipse a 1.6, ma anche in questo caso ho lo stesso problema. Come posso risolvere questo?

+0

Hai ricostruito/compilato il tuo progetto o lo hai appena ripetuto con la modifica della configurazione? –

+0

Sì, lo ricostruisco. – user2054833

risposta

17

La soluzione è quella di utilizzare una copia del driver di database che viene compilato per JDK 6.

Sembra che non si ottiene il problema con il codice dell'applicazione, perché le modifiche costruire lavorato. (In particolare la modifica al livello di conformità. Non credo che aggiungere un JDK al percorso di compilazione (regolare) farà alcuna differenza.)

Ma ovviamente, questo non farà alcuna differenza per il driver del database. .. perché non lo stai compilando


Tuttavia, secondo the download page, PostgreSQL-9.2-1002.jdbc4 si suppone che sia compatibile con Java 6 e 7. Quindi forse hai ottenuto il JAR da qualche altra parte ... o compilando dalla sorgente con un obiettivo Java 7.

UPDATE - Posso confermare che il JAR sul sito di download ha una classe pilota la cui versione bytecode non è 50.0 51.0. Ti suggerisco di scaricare e utilizzare una nuova copia da lì.

+1

Oppure ottieni l'origine (se disponibile) per il driver e compila tu stesso con la destinazione java 6. –

9

Se si utilizza Maven, lo 9.2-1002-jdbc4 version nel repository centrale è stato compilato utilizzando la destinazione 1.7. Utilizzare la versione precedente fino a quando non è stato risolto.

+0

Solo per riferimento: la versione precedente nel repository centrale sarebbe postgresql: postgresql: 9.1-901-1.jdbc4 (notare il groupId diverso) –

6

Sembra che questo è stato risolto con l'ultima ID Build 1003:

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

per Java 6 uso:

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

per Java 7 uso:

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

Funziona, grazie! (Il mio compilatore è 1.6 e uso postgresql-9.2-1004-jdbc4.jar) – Zhiya

0

I si è verificato questo problema e anche ClassNotFoundException per il caricamento del problema del driver JDBC. La soluzione è ottenere la versione corretta del jar postgres da http://jdbc.postgresql.org/download.html#jdbcselection. Se stai usando Maven, aggiungi di conseguenza la versione della tua dipendenza.

1

Il modo migliore è quello di installare la versione superiore di java che l'applicazione compila con e supponiamo se ho Applicazione con compilare con Jre 1.6 quindi ho bisogno di 1.6 o versione superiore di Jre 1.6 e ya una cosa è che

o

Basta compilare il file di classe intendo il file application.java con Jre predefinito che è disponibile con java e Just Run sullo stesso.

o Terza opzione.

Scaricare JRE e installare la versione di JRE nella macchina.

0

L'alternativa allo swapping del driver Postgres non compatibile con Java 6 per una versione alternativa di Java 7 (come raccomandato dalla maggior parte delle altre risposte) è che Heroku usi Java 7 per compilare ed eseguire l'applicazione. Se stai usando JDK 7 per lo sviluppo, come dici tu, questo potrebbe aiutare ad evitare altre incompatibilità.

Per fare ciò, seguire these instructions su Heroku Devcenter. Ecco un riassunto:

  1. Creare un file denominato system.properties nella directory di base dell'app.
  2. aggiungere la proprietà java.runtime.version=1.7 al file, cioè .:

    java.runtime.version=1.7 
    
  3. commit del file system.properties e spingere a Heroku.

Problemi correlati