Domanda

Sarà codice compilato usando 1.5 e 1.6 funzionare su un 1.4 JRE? Non eravamo sicuri che le versioni di Java JRE 1.4 supporta.

Sappiamo che se il codice in questione implementa 1.5 o 1.6 funzioni supportate allora sicuramente non si compila ... e che ci sono alcune rischi con "a ritroso la compilazione" ma non era sicuro se il 1.4 JRE si rifiuterebbe di caricare anche i 1.5 / 1.6 classi compilate o meno.


Aggiorna :. Ho confermato che si ottiene un'eccezione java.lang.UnsupportedClassVersionError se si esegue un file di 1,6 classe su JRE 1.4

È stato utile?

Soluzione

Se hai appena costruire con le impostazioni predefinite di javac 1.6, i file di classe non funzioneranno su vecchie versioni di Java.

Il modo migliore per compilare per anziani Java è solo quello di utilizzare la vecchio JDK rilascia . Ma se si vuole veramente provare a compilare per Java più vecchio dal nuovo, qui ci sono alcune istruzioni:

Altri suggerimenti

È possibile attraversare-compilazione. Questo documento mostra come:

http: // java. sun.com/javase/6/docs/technotes/tools/solaris/javac.html#crosscomp-example

È necessario specificare la versione principale specifico che stai targeting (1.4, suona come).

Con questa tecnica, la soluzione migliore è di usare sempre il più recente javac si può trovare! In questo modo si dispone di tutte le ultime correzioni di bug e miglioramenti delle prestazioni, ed è perfettamente sicuro.

EDIT: Si noti che questo affrontare il problema della incompatibilità biblioteca, che è stato discusso in varie risposte

Solo se si compila con interruttore javac -target 1.4.

Ovviamente non sarà in grado di utilizzare 1.5+ caratteristiche, come Generics, Esecutori, ecc.

Si potrebbe anche essere interessati a http://en.wikipedia.org/wiki/Java_backporting_tools

Non credo che lo farà.

Di tanto in tanto (per ragioni troppo complesse da spiegare), cerco di eseguire il codice in un 1.5 JRE che ho compilato in un 1.6 JDK. Si getta in genere un'eccezione java.lang.UnsupportedClassVersionError.

Sì e no. È possibile eseguire codice compilato in Java 6 su una JVM 1.4 se si imposta la "fonte" e "obiettivo" opzioni javac al sito ci si rivolge (ad esempio 1,4) quando li si compila. Ciò funzionerà nei casi in cui non è stato utilizzato nessuna delle classi aggiuntive o funzionalità del linguaggio che sono stati aggiunti dal momento che la versione di destinazione.

In bocca al lupo.

Sì, è possibile produrre file di classe che sono compatibili con 1.4 con il 1,6 compilatore (javac), tuttavia, semplicemente facendo questo non è necessariamente andare a produrre codice che funziona. Il problema è che questo sarà ancora compilare contro la versione 1.6 delle API.

A prima vista non ci si aspetterebbe che questo sia un problema dal momento che i contratti non dovrebbero cambiare, ma è - ho avuto un problema in quanto un nuovo costruttore che prende IIRC un intero stato aggiunto al BigDecimal (in 1.5) e quindi a compilazione tempo la chiamata a tale costruttore è stato specificato tuttavia in fase di esecuzione che il costruttore non esisteva e quindi un'eccezione di runtime. Probabilmente stai andando ad avere problemi come questo quando i metodi sono sovraccarichi e vi affidate ai conversione variabile automatico.

L'applicazione Javac è infatti indipendente dalla versione di Java che appartiene a -. È possibile specificare un diverso API da usare contro 1,6 javac e al fine di evitare eventuali problemi di runtime questo dovrebbe essere fatto

Java 1.5 era una major release, dove ha introdotto enumerazioni, autoboxing e altri stuffs.while compilazione otterrete un'eccezione dicendo di classe non supportata version.But se si compila con il comando javac -source 1.4 -target 1._ claasname.java esso compilerà.

Se si utilizza funzionalità di 1,5 come il pugilato di auto e le enumerazioni in questo scenario non si compila in quanto queste funzioni non sono disponibili in 1.4.In questo caso abbiamo bisogno di convertire il nostro codice per le vecchie versioni basate su alcuni strumenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top