Un programma realizzato con Java 8 può essere eseguito su Java 7?

Sono leggermente confuso.

  1. Oracle afferma che Java 8 è altamente compatibile con Java 7 (backward). Ma quali sono le possibilità che il programma Java 8 possa essere eseguito con successo su Java 7 (SE / EE)?

  2. Se il punto uno era vero, le applicazioni Java 8 verranno implementate ed eseguite su un supporto server Java 7? ad esempio, Tomcat 8 o WildFly?

In generale, no.

La compatibilità all’indietro significa che è ansible eseguire il programma Java 7 su Java 8 runtime, non viceversa.

Ci sono diversi motivi per questo:

  • Bytecode è versionato e JVM controlla se supporta la versione trovata in file .class.

  • Alcuni costrutti di linguaggio non possono essere espressi nelle versioni precedenti di bytecode.

  • Ci sono nuove classi e metodi in JRE più recenti che non funzioneranno con quelli più vecchi.

Se davvero, davvero vuoi (consiglio: non lo fai), puoi forzare il compilatore a trattare il sorgente come una versione di Java ed emettere bytecode per un altro, usando qualcosa di simile a questo:

javac -source 1.8 -target 1.7 MyClass.java 

( lo stesso per Maven ), e compilato contro JDK7, ma in pratica sarà più spesso non lavoro che lavoro. Ti raccomando di no.

EDIT : JDK 8 a quanto pare non supporta questa combinazione esatta, quindi questo non funzionerà. Alcune altre combinazioni di versioni funzionano.

Ci sono anche programmi per convertire i programmi Java più recenti per lavorare su JVM più vecchi. Per convertire Java 8 a 5-7, puoi provare https://github.com/orfjackal/retrolambda Per ottenere un numero inferiore a 5, puoi sceglierne uno: http://en.wikipedia.org/wiki/Java_backporting_tools

Nessuno di questi hack ti fornirà nuove classi e metodi Java 8, incluso il supporto alla programmazione funzionale per raccolte, flussi, API temporali, API senza firma e così via. Quindi direi che non ne vale la pena.

Oppure, dal momento che si desidera eseguire le applicazioni JEE Java 8 su un server applicazioni, è sufficiente eseguire l’intero server su Java 8, potrebbe funzionare.

Significa compatibilità a ritroso

È ansible eseguire la configurazione inferiore su Configurazione superiore non Vice-Versa .

Bene, c’è l’opzione del compilatore -target , che ti permette di indirizzare il formato del file di class delle precedenti versioni di Java. Tuttavia, ciò non risolve o rileva elementi come l’utilizzo di classi o metodi introdotti nelle API JDK dopo la versione di destinazione.

Nessuna retrocompatibilità significa che i programmi Java7 gireranno sotto Java8, ma il contrario non è sempre vero

Puoi anche verificare la compatibilità con Oracle Limit all’indietro

In generale, le nuove versioni devono garantire la retrocompatibilità, quindi le persone non devono gettare il loro lavoro e possono eseguire facilmente l’aggiornamento. Il contrario (versione più recente in esecuzione nella versione precedente) non è necessariamente vero perché se si utilizzano alcune nuove funzionalità implementate, tale caratteristica ovviamente non esiste nella versione precedente e non funzionerà.

Saluti

Ho generato stub da WSDL, compilato in java 8 ed è stato in grado di distribuirli su server con java java 1.6 su di esso.