Frage

Wir sind mit Java2SE v1.4 bis Ende 2010 stecken Das ist wirklich böse ist, aber wir können es nicht ändern. Welche Möglichkeiten haben wir, schon jetzt einige der neuen Funktionen nutzen? Ich kann von mehreren Möglichkeiten denken wie

  • Ändern der Bytecode, z.B. mit oder Retrotranslator Retroweaver .

  • Rückportierung von Bibliotheken, z.B. Concurrent Backport , aber das hilft nicht für Generika.

  • Emulation von Java-5-Funktionen, zum Beispiel Kollektionen geprüft, varargs mit Hilfsmethoden, etc.

  • Ändern Quellcode von Precompilieren, Strippen alle 1,5 Sachen vor dem endgültigen Zusammenstellung, z.B. mit Declawer kann dies tun.

Ich bin sehr daran interessiert, sehr positive Erfahrungen damit in Produktionsumgebungen mit Weblogic und "real" stuff.

War es hilfreich?

Lösung

Vielen Dank für Ihre Antworten. Hier ist die Zusammenfassung aller relevanten Antworten und meine eigene Forschung.

Ändern der Bytecode: Die Retros
Dies wird durch die "retro" -werkzeuge : Retrotranslator , und Retroweaver < a href = "http://www.jboss.org/community/docs/DOC-10738" rel = "nofollow noreferrer"> JBossRetro . Retrotranslator scheint die reif zu sein und aktiv von ihnen Werkzeug. Diese Tools scannen alle Klassen und den Bytecode ändern Java 5 und 6 Funktionen zu entfernen. Viele Java5 Funktionen unterstützt werden, einige von 3rd-Party-Backport Bibliotheken. Diese Option ist sehr beliebt und es gibt einige positive Feedback von Anwendern. Versuche haben gezeigt, dass es funktioniert wie erwartet. Hier finden Sie eine kurze Übersicht über developer .

Pro: Sie können in Java 5, bauen Module und alle Arten von JAR-Dateien vollständig entwickeln. Am Ende verwandeln Sie einfach alle Klassen Java 1.4 und Ihre EAR verpacken. Dies ist leicht mit der Retrotranslator Maven Integration getan (org.codehaus.mojo:retrotranslator-maven-plugin).

Con: Konservativ Umgebungen nicht zulassen geänderten Bytecode eingesetzt werden. Das Ergebnis der Retro-Schritt ist in jedem Codierer nicht sichtbar und nicht genehmigt werden kann. Das zweite Problem ist die Angst: Es könnte einige kryptische Produktionsproblem und die Retro-Code sein, ist ein weiterer Schritt, die dafür verantwortlich gemacht werden könnten. App-Server-Anbieter könnte Hilfe aufgrund geänderter Bytecode verweigern. So will niemand die Verantwortung übernimmt es in der Produktion zu verwenden. Da dies eher ein policital als eine technische Problem, so sehe ich keine Lösung. Es hat uns passiert ist, so dass ich war auf der Suche nach weiteren Möglichkeiten: - (

Kompilieren Java5 auf Java 1.4: jsr14
Es ist eine nicht unterstützte Option, javac -source 1.5 and -target jsr14 die die Java5 Quelle gültigen Java 1.4 Bytecode kompiliert. Die meisten Funktionen wie varargs oder Schleife verlängert werden vom Compiler ohnehin übersetzt. Generics und Anmerkungen werden entfernt. Aufzählungen werden nicht unterstützt und ich weiß nicht, über Autoboxing, da die valueOf Methoden meist in Java5 eingeführt wurden.

Con: Es werden nur Byte-Code übersetzt wird, ist Bibliotheksnutzung nicht geändert. Also muss man vorsichtig sein, nicht Java5 spezifische APIs zu verwenden (aber könnte verwenden Backports). Des Weiteren müssen Sie alle Module in der gleichen Zeit bauen, weil für Entwicklungszeit propably Sie Java5 Code mit Generika und Annotation Informationen abrufen möchten. So müssen Sie das gesamte Projekt von Grund auf neu bauen für Java 1.4 Produktion.

Ändern Quelle zurück zu Java 1.4: Declawer
Wie in einer Zusammenhang Frage beantwortet, da Declawer , eine Compiler-Erweiterung, die für die Arbeiten Generika und varargs, aber nicht für die for-Schleife verstärkt oder Autoboxing. Die erzeugte Quelle „ist ein wenig flippig, aber auch nicht schlecht“.

Pro: Die erzeugte Quelle verfügbar ist und überprüft werden kann. Im schlimmsten Fall Korrekturen können in dieser Quelle hergestellt werden. Es gibt keine „Magie“, weil die Quelle gilt Java. Einige Leute sogar verwenden JAD (Java Decompiler) erneut, um die Java 1.4 Quelle zu erhalten. Die Ausgabe von Jad lesbar lesbar ist, wenn Sie mit debug kompilieren Informationen und keine inneren Klassen verwenden.

Con: Ähnlich wie bei -target jsr14, müssen Sie einen zusätzlichen Schritt in der Implementierung. Gleiche Probleme mit Bibliotheken, zu.

Ändern Quelle zurück zu Java 1.4: von Hand
Mehrere Antworten vorgeschlagen es von Hand zu tun. Für einen automatischen Wiederholen der Build-Prozess thfür die einmalige ist natürlich ändert sich nicht sinnvoll, aber es ist angemessen. Nur automatisieren, was möglich ist. Blick auf Antlr Vielleicht ein home-grown-Konvertierungs-Werkzeug für die Erstellung.

zurückportiert Bibliotheken:
Das Problem ist, dass Java5 auch Schiffe neue Bibliotheken, die in älteren JREs nicht verfügbar sind, finden Sie unter bezogene Frage . Glücklicherweise gibt es mehr portiert Bibliotheken, die Ihnen einige Funktionen von Java5 geben, kann aber nicht die Sprache Funktionen simulieren, wie Generika.

Emulating Java5 Funktionen in Java 1.4-Code:
Ich dachte über einige Dinge, die Sie tun könnten Ihr Leben einfacher und immer noch mit Java 1.4 bleiben zu machen. Die wichtigsten Merkmale sind typsicher Sammlungen, Hier sind einige Ideen:

  • Statt Generika verwenden Sie können Ihre eigenen Container typsicher mit einigen Vorlage erstellen.
  • Fügen Sie eine typsichere Iterator (die kein Iterator ist mehr).
  • In
  • asList Methoden, die 1,2,...,n Argumente und eine Reihe von ihnen erlaubt (zu simulieren varargs).
  • Methoden für varargs und 1,...,n (valueOf Argumente Arrays Umwandlung) können in einiger Hilfsklasse gesetzt werden.

Andere Tipps

  

Source Precompilieren, Abisolieren   alle 1,5 Sachen vor dem endgültigen Zusammenstellung   und Bereitstellung. Gibt es irgendwelche Werkzeuge   was tun dies kann?

Ja. Sie sind Retrotranslator oder Retroweaver genannt. Abgesehen von Generics (die nur existieren, im Interesse des Compilers sowieso), können Sie nicht einfach „1,5 Sachen Streifen“. Aufzählungen (und vielleicht auch einige andere Funktionen) haben mit funktionell äquivalenten Code ersetzt werden. Das ist genau das, was diese Werkzeuge tun.

Sie können mit JDK Code 1.5 Funktionen und Ziel JDK 1.4 bei der Kompilierung. Siehe verfügbar Javac Optionen. Allerdings sind die meisten Bibliotheken nun JDK 1.5-Code, so dass Sie mit alten Libs geklebt werden.

Es erwähnenswert, dass, während Java 1.4 wird seit einiger Zeit EOL gewesen. Java 5.0 wird der 8. EOL Oktober 2009, wenn jemand Sie Java 5.0 bis 2010 verspricht, würde ich fragen, warum?!

Annotationen in Java 1.4 Zur Simulation können Sie verwenden http://xdoclet.sourceforge.net/ xdoclet / index.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top