Vielen Dank für Ihre Antworten verwenden können. Hier ist die Zusammenfassung aller relevanten Antworten und meiner eigenen Forschung.
Ändern der Bytecode: Die Retros
Dies wird durch die "retro"-tools getan wird: Retrotranslator, Retroweaver und JBossRetro. Retrotranslator scheint das ausgereifteste und aktive von ihnen Werkzeug zu sein. Diese Tools durchsuchen alle Klassen und ändern den Bytecode, um Java 5 und 6 Features zu entfernen. Viele Java5-Funktionen werden unterstützt, einige mithilfe von Backport-Bibliotheken von Drittanbietern. Diese Option ist am beliebtesten und es gibt einige positive Rückmeldungen von Benutzern. Experimente haben gezeigt, dass es als erwartet wird. Siehe einen kurzen Überblick über developerworks.
Pro: Sie können vollständig in Java 5 entwickeln, Module und alle Arten von JARs erstellen. Am Ende transformieren Sie einfach alle Klassen in Java 1.4 und packen Ihre EAR. Dies ist einfach mit Retrotranslator Maven Integration().
Con: In konservativen Umgebungen kann kein geänderter Bytecode implementiert werden. Das Ergebnis des Retro-Schritts ist für keinen Coder sichtbar und kann nicht genehmigt werden. Das zweite Problem ist die Angst: Es könnte ein kryptisches Produktionsproblem geben und der Retro-Code ist ein weiterer Schritt, der dafür verantwortlich gemacht werden könnte. Die App-Server-Anbieter könnten die Hilfe aufgrund eines geänderten Bytecodes ablehnen. Also niemand will Verantwortung übernehmen, um es in der Produktion zu verwenden. Da dies eher ein politisches als ein technisches Problem ist, sehe ich keine Lösung. Es hat uns passiert ist, so dass ich war auf der Suche nach weiteren Möglichkeiten :-(
compilieren 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ültige Java 1.4 Bytecode kompiliert meisten Features wie varargs oder Schleife erweitert werden ohnehin vom Compiler übersetzt. Generics und Anmerkungen gestrippt werden. Aufzählungen nicht unterstützt werden und ich weiß nicht, über Autoboxing, da die valueOf
Methoden meist in Java5 eingeführt wurden.
Con : Nur Byte-Code wird übersetzt, Bibliotheksverwendung wird nicht geändert, Sie müssen also vorsichtig sein t, Java5-spezifische APIs zu verwenden (aber Backports). Außerdem müssen Sie alle Module gleichzeitig erstellen, da Sie für die Entwicklungszeit Java5-Code mit generischen Informationen und Annotationsinformationen benötigen. Sie müssen also das gesamte Projekt von Grund auf für die Java 1.4-Produktion erstellen.
Ändern Quelle zurück zu Java 1.4: Declawer
Wie in einem related question beantwortet, gibt es Declawer, eine Compiler-Erweiterung, die für Generika funktioniert und varargs, aber nicht für Autoboxing for-Schleife oder erweitert. Die erzeugte Quelle "ist ein wenig funky, aber nicht so schlecht".
Pro: Die generierte Quelle ist verfügbar und kann überprüft werden. Im schlimmsten Fall können in dieser Quelle Korrekturen vorgenommen werden. Es gibt keine "Magie", weil die Quelle gültiges Java ist. Einige Leute verwenden sogar JAD (Java Decompiler), um die Java 1.4-Quelle erneut zu bekommen. Die Ausgabe von Jad lesbar ist lesbar, wenn Sie mit Debug Informationen kompilieren und keine inneren Klassen verwenden.
Con: Ähnlich wie -target jsr14
benötigen Sie einen zusätzlichen Schritt in der Bereitstellung. Gleiche Probleme mit Bibliotheken.
Ändern Quelle zurück zu Java 1.4: von Hand
Mehrere Antworten vorgeschlagen es von Hand zu tun. Für einen automatischen, sich wiederholenden Build-Prozess ist dies natürlich nicht sinnvoll, aber für einmalige Änderungen ist es zumutbar. Automatisieren Sie einfach, was möglich ist. Vielleicht sehen Sie sich Antlr an, um ein selbst entwickeltes Konvertierungstool zu erstellen.
zurückportiert Bibliotheken:
Das Problem ist, dass auch Schiffe Java5 neue Bibliotheken, die in älteren JREs nicht verfügbar sind, finden related question. Glücklicherweise gibt es mehrere rückportierte Bibliotheken, die Ihnen einige Funktionen von Java5 zur Verfügung stellen, aber keine Sprachfunktionen wie Generics simulieren können.
- Annotations, bei TSS diskutiert
- Concurrent
- com.sun.net.httpserver (Java 6-5)
- Gif writing (Java 6-5)
- Starten Sie Ihr eigenes Projekt Backport ;-)
- Sie könnte Klassen, die Sie benötigen, aus dem JDK oder anderen Bibliotheken kopieren, aber höchstwahrscheinlich sind sie mit anderen Klassen verwandt.
Emulating Java5 Funktionen in Java 1.4-Code:
ich über einige Dinge dachte, Sie tun könnte Ihr Leben einfacher und noch bleiben mit Java 1.4 zu machen. Die wichtigsten Merkmale sind typsicher Sammlungen, hier einige Ideen sind:
- Statt Generika verwenden Sie können Ihre eigenen Container typsicher mit einigen Vorlage erstellen.
- Fügen Sie einen typsicheren Iterator hinzu (was kein Iterator mehr ist).
- Fügen Sie
asList
Methoden hinzu, die 1,2,...,n
Argumente und ein Array von ihnen ermöglicht (Varargs zu simulieren).
- Methoden für varargs (konvertieren
1,...,n
Argumente zu Arrays) und valueOf
kann in einige Helfer-Klasse gesetzt werden.
um wirklich wählerisch zu sein ... es gab nie ein Java 4, es war Java 2 Release 1.4. –
Ja, weil die Marketingnamen von Sun logisch sind. –
Danke für die Bearbeitung der Tags. Ich habe SO durchsucht, aber die zugehörigen Fragen nicht gefunden: - http://StackOverflow.com/questions/603828/java-5-to-java-1-4-source-code-backporting-tool - http: // stackoverflow.com/questions/547872/converting-java-1-5-source-into-1-1-source - http://stackoverflow.com/questions/17993/easy-way-to-backport-java-6 -code-to-java-5 –