Domanda

Siamo bloccati con Java2SE v1.4 fino alla fine del 2010. È davvero brutto, ma non possiamo farci niente. Quali opzioni dobbiamo utilizzare alcune delle nuove funzionalità già adesso? Posso pensare a diversi modi come

  • modifica del bytecode, ad es. utilizzando Retrotranslator o Retroweaver .

  • backport delle librerie, ad es. Backport simultaneo , ma questo non aiuta i generici.

  • emulazione delle funzionalità di Java 5, ad es. raccolte selezionate, Vararg con metodi di supporto, ecc.

  • modifica del codice sorgente mediante precompilazione, eliminazione di tutte le 1.5 cose prima della compilazione finale, ad es. utilizzando Declawer puoi farlo.

Sono molto interessato a un'esperienza molto positiva con esso in ambienti di produzione che utilizzano Weblogic e "reale". roba.

È stato utile?

Soluzione

Grazie per le risposte. Ecco il riassunto di tutte le risposte pertinenti e la mia ricerca.

Modifica del bytecode: i Retros
Questo viene fatto da " retro " -tools : Retrotranslator , Retroweaver e JBossRetro . Retrotranslator sembra essere il più maturo e attivo di loro strumento. Questi strumenti eseguono la scansione di tutte le classi e modificano il bytecode per rimuovere le funzionalità Java 5 e 6. Sono supportate molte funzionalità Java5, alcune utilizzando librerie di backport di terze parti. Questa opzione è molto popolare e c'è un feedback positivo da parte degli utenti. Gli esperimenti hanno dimostrato che funziona come previsto. Guarda una breve panoramica su developerworks .

Pro: puoi sviluppare interamente in Java 5, creare moduli e tutti i tipi di JAR. Alla fine trasformi tutte le classi in Java 1.4 e impacchetti il ??tuo EAR. Questo è facilmente realizzabile con l'integrazione Maven di Retrotranslator ( org.codehaus.mojo: retrotranslator-maven-plugin ).

Con: gli ambienti conservativi non consentono di distribuire il bytecode modificato. Il risultato del retro-step non è visibile a nessun programmatore e non può essere approvato. Il secondo problema è la paura: potrebbe esserci qualche problema di produzione criptica e il codice retrò è un altro passo che potrebbe essere biasimato per questo. Fornitori di app-server potrebbe rifiutare aiuto a causa della modifica del bytecode. Quindi nessuno vuole assumersi la responsabilità di usarlo in produzione. Poiché si tratta piuttosto di un poliziotto che di un tecnico problema, quindi non vedo soluzione. Ci è successo, quindi stavo cercando ulteriori opzioni :-(

Compilazione di Java5 in Java 1.4: jsr14
C'è un'opzione non supportata, javac -source 1.5 e -target jsr14 che compila l'origine Java5 in bytecode Java 1.4 valido. La maggior parte delle funzionalità piace varargs o extended for loop sono comunque tradotti dal compilatore. I generici e le annotazioni vengono eliminati. Gli enum non sono supportati e non lo so sull'autoboxing, poiché i metodi valueOf sono stati principalmente introdotti in Java5.

Con: viene tradotto solo il codice byte, l'utilizzo della libreria non viene modificato. Quindi devi stare attento a non usare API specifiche di Java5 (ma potresti usare Backports). Inoltre devi costruire tutti i moduli allo stesso tempo, perché per i tempi di sviluppo desideri un codice Java5 con informazioni generiche e di annotazione. Quindi devi costruire l'intero progetto da zero per la produzione di Java 1.4.

Modifica della sorgente su Java 1.4: Declawer
Come risposto in una domanda correlata , lì è Declawer , un'estensione del compilatore, che funziona per generici e vararg, ma non per potenziati per loop o autoboxing. La fonte generata "è un po 'funky, ma non troppo male".

Pro: la fonte generata è disponibile e può essere rivista. Nel peggiore dei casi è possibile apportare correzioni a questa fonte. Non esiste alcuna "magia", perché la fonte è Java valido. Alcune persone usano persino JAD (decompilatore Java) per ottenere nuovamente l'origine Java 1.4. L'output di Jad è leggibile se si compila con il debug informazioni e non usare le classi interne.

Con: simile a -target jsr14 , è necessario un ulteriore passaggio nella distribuzione. Stessi problemi anche con le biblioteche.

Ripristino di Source in Java 1.4: manualmente
Diverse risposte suggeriscono di farlo a mano. Per un processo di generazione automatico e ripetuto, questo ovviamente non è utile, ma per le modifiche una tantum lo è ragionevole. Automatizza ciò che è possibile. Magari guarda Antlr per creare uno strumento di conversione fatto in casa.

Librerie con backport:
Il problema è che Java5 fornisce anche nuove librerie, che non sono disponibili nei vecchi JRE, vedere domanda correlata . Fortunatamente ce ne sono diversi librerie con backport che offrono alcune funzionalità di Java5, ma non sono in grado di simulare funzionalità del linguaggio, come generics.

Emulazione delle funzionalità Java5 nel codice Java 1.4:
Stavo pensando ad alcune cose che potresti fare per semplificarti la vita e rimanere ancora con Java 1.4. Le caratteristiche più importanti sono raccolte typesafe, ecco alcune idee:

  • Invece di usare generici puoi creare i tuoi contenitori dattiloscritti con alcuni template.
  • Aggiungi un Iteratore dattiloscritto (che non è più Iteratore).
  • Aggiungi i metodi asList che consente gli argomenti 1,2, ..., n e un array di questi (per simulare varargs).
  • I metodi per varargs (conversione degli argomenti 1, ..., n in array) e valueOf possono essere inseriti in alcune classi di supporto.

Altri suggerimenti

  

precompilazione codice sorgente, stripping   tutte le cose 1.5 prima della compilazione finale   e distribuzione. Ci sono degli strumenti   quale può fare questo?

Sì. Si chiamano Retrotranslator o Retroweaver. A parte Generics (che esiste comunque solo per il bene del compilatore), non puoi semplicemente "spogliare 1.5 cose". Gli enum (e forse anche alcune altre funzionalità) devono essere sostituiti con un codice funzionalmente equivalente. Questo è esattamente ciò che fanno quegli strumenti.

Puoi codificare con le funzionalità di JDK 1.5 e scegliere come target JDK 1.4 al momento della compilazione. Vedi le opzioni disponibili di Javac. Tuttavia, la maggior parte delle librerie ora utilizza il codice JDK 1.5, quindi rimarrai bloccato con le vecchie librerie.

Vale la pena notare che mentre Java 1.4 è stato EOL per qualche tempo. Java 5.0 sarà EOL l'8 ottobre 2009. Se qualcuno ti promette Java 5.0 entro il 2010, vorrei chiedere perché ?!

Per simulare le annotazioni in java 1.4 puoi usare http://xdoclet.sourceforge.net/ XDoclet / index.html

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