2009-06-10 8 views
7

Ho un progetto che utilizza generici e pochi Java 1.5/6 bit e pezzi. È possibile compilare questo codice per lavorare su un sistema che esegue un JRE 1.4?Compilazione del codice Java scritto per 1.5 per funzionare con 1.4 JRE?

Uso uno script di build ANT e un task javac per compilare la libreria. Questo funziona bene mentre l'attributo target è 1.5.

Se cambio il target da 1,4 ricevo il seguente errore:

generics are not supported in -source 1.4 
(use -source 5 or higher to enable generics) 

Così ho aggiungere un attributo di origine e cercare un valore di 5 e 1,5. Nuovo errore:

javac: source release 5 requires target release 1.5 

Devo passare attraverso tutto il mio codice e modificare le cose 1.5 per far funzionare questo?

+0

Note 1.4 ha terminato il suo periodo di vita di servizio e 1,5 è la maggior parte del suo modo attraverso. Tuttavia, il supporto "Java for Business" è disponibile a un prezzo. –

risposta

7

non ho usato una di queste soluzioni, ma c'è

  1. Retroweaver
  2. specificando il supportato -target jsr14può lavoro
  3. Retrotranslator
  4. Declawer
  5. JBossRetro

Si potrebbe anche trovare javac -XD-printflat utile (anche se fate attenzione a non sovrascrivere il fonte originale).

+0

Secondo sembra funzionare. Ora per verificare che la libreria funzioni effettivamente su JRE 1.4 ... –

+1

jsr14 non lo taglierà. Nessun supporto enum. D'altra parte, Retroweaver è fantastico. –

+0

Grazie, fino ad ora, conoscevo Retroweaver.La maggior parte di questi strumenti afferma esplicitamente che possono targetizzare 1.4, ma per quanto posso vedere, solo Retroweaver consente di scegliere come target anche 1.2, che potrebbe essere necessario per lo sviluppo di J2ME. –

0

I generici sono implementati per tipo di cancellazione in modo che possano funzionare prima dell'introduzione dei farmaci generici. Tuttavia si sarebbe in grado di compilare il codice con una versione precedente del compilatore (non so perché si vuole farlo)

+0

Utilizzo del compilatore JDK 1.6. Sembra strano che tu possa specificare la versione di destinazione e la versione sorgente, ma dà un errore se questi non sono gli stessi. –

+0

È possibile specificare una versione di origine precedente rispetto alla versione di destinazione. Quindi la tua sorgente 1.4 con Enumerazioni chiamata enum può ancora compilare e lavorare su JDK in-service-life non modificati. –

6

I have a project that uses generics and a few Java 1.5/6 bits and pieces. Is it possible to compile this code to work on a system running a 1.4 JRE?

No.

Am I going to have to go through all my code and change the 1.5 stuff to make this work?

Sì. Ma c'è un modo per automatizzarlo, usando uno strumento chiamato Retroweaver. Non c'è alcuna garanzia che catturerà tutto comunque.

1

Ho avuto una buona esperienza con Retrotranslator (retroweaver non ha funzionato bene con quello di cui avevo bisogno, non ricordo esattamente cosa).

Ha funzionato molto bene per il mio scopo (creare versioni JDK1.4 di Logback).

http://retrotranslator.sourceforge.net/

Problemi correlati