2009-06-05 9 views
7

Ich möchte einige vorhandene j2se Bibliotheken (zB Apache Compression libs) portieren, um sie für Blackberry Entwicklung zu verwenden, aber es gibt einen Haken (und nicht nur einen).Downgrade Java Code 1.5 auf 1.4 (Bonuspunkte: J2ME, Blackberry !!!)

Zuerst verwenden die meisten Java-Bibliotheken ausgiebig j2se-Sammlungen und -Datentypen, die normalerweise auf j2me-Plattformen fehlen - aber das ist theoretisch dank Open-Source-j2se-API-Implementierungen wie Apache Harmony lösbar. Das größere Problem ist, dass es scheint, dass Blackberry JDK auf Java 1.4 basiert, also ist jeder Code, der Generics und andere 1.5 Features, wie Enums, verwendet, nicht mühelos auf Blackberry kompilierbar.

die eine interessante Frage aufwirft, ob es da draußen alle vorhandenen Werkzeuge oder Projekte sind, dass die automatische 1.5-> 1.4 Umwandlung tun würde, während J2ME-bastardized Bytecode Unterstützung :)

Ein Projekt, das ich finden konnte Retroweaver, aber ich bin mir nicht sicher, wie aktiv dieses Projekt ist.

Ich bin mir sicher, dass das Problem der automatischen Konvertierung 1.5-> 1.4 nicht einzigartig ist - also hat jemand irgendwelche Erfahrung damit?

+1

1.4 wird dir nicht Java geben, da "alle Java ME-Plattformen derzeit auf JRE 1.3 beschränkt sind" ([Quelle: Wikipedia] (http://en.wikipedia.org/wiki/Java_Platform,_Micro_Edition)) - zB , Java ME hat kein JDK 1.4-spezifisch. – gnat

Antwort

1

Also hier ist, was ich bisher zu tun endete: Declawer + einige benutzerdefinierte Code für die Generierung von Aufzählungsklassen.

Das eine Unterscheidungsmerkmal bei Declawer ist, dass, obwohl es sehr einfach ist und, offen gesagt, ein bisschen ein Hack (es beruht auf einer nicht dokumentierten Fähigkeit von JavaC), seine Ausgabe ist tatsächlich Java-Code im Vergleich zu erweitertem oder konvertierten Java Bytecode. Das ist sehr wertvoll für die mobile Java-basierte Entwicklung, denn, offen gesagt, ist die Bytecode-Modifikation/Instrumentierung für j2me-Plattformen überhaupt nicht so entwickelt wie für j2se, und es gibt einfach keine Garantie dafür, dass die Dinge so funktionieren Sie tun mit j2se, wo diese Tools bereits von einigen Entwicklern verwendet wurden.

Die Funktionalität von Declawer ist begrenzt (keine Liebe für 1.5 Enums oder Autoboxing), also musste ich ein Python-Skript hinzufügen, um automatisch Klassen zu generieren, die äquivalent zu 1.5 enums von einfachen Deskriptoren sind. Diese Generation passiert zur Erstellungszeit.

Dies richtet sich meine Bedenken bisher, mit der einzigen Ausnahme, eine gute J2ME freundliche IoC-Container für meine App nutzen zu finden (wenn man diese Leute versuchen, es so schwer ist, sie aufzugeben.)

Aber Das ist eine Diskussion für einen anderen Thread.

2

Ich habe Retroweaver in der Vergangenheit (J2SE, nicht J2ME) verwendet - es hat wirklich gut funktioniert. Die Kosten für die Verwendung sind einige zusätzliche Laufzeitabhängigkeiten.

Update 2013-01-28: Nachdem Probleme mit RetroWeaver aufgetreten, habe ich auf RetroTranslator gewechselt.

+0

Sie haben Recht - J2SE (oder J2SE JRE?). Es ist Freitag ... :) – ptyx

7

Haben Sie versucht Retrotranslator? Ich habe gelesen, dass es besser funktioniert als Retroweaver.

+0

das ist fantastisch, danke! Dies scheint eine viel bessere Dokumentation als Retroweaver zu haben. Ich werde ein bisschen damit spielen müssen :) –

+0

Meine einzige Sorge, denke ich, ist, wie diese Werkzeuge von den Bytecodeunterschieden in den Klassendateien beeinflußt werden, die vom Compiler für j2me Plattformen produziert werden. –

+0

Da ich Kommentare von anderen in einem Beitrag nicht kommentieren kann (habe noch keine 50 Reputation), werde ich sie hier posten: - in Bezug auf das Kompilieren mit 1.5 für Quelle und 1.4 für Ziel, wird es nur funktionieren, wenn Sie verwenden keine 1.5 Funktionen in Ihrem Code (überrascht, dass es für Generika funktioniert hat, aber ich kann sehen, warum seit Generika zur Laufzeit verschwinden), daher ist es nicht hilfreich. - in Bezug auf andere Tools, die Sie gefunden haben, hoffe ich, dass mindestens einer Ihnen bei allen Aspekten Ihres Problems hilft. –

2

Hier something else ich hier auf Stack-Überlauf gefunden:

mit dem regulären javac übersetzen und eine ältere JVM-Targeting finden Sie die richtige Bytecode für Generika geben mindestens

, die absolut Sinn macht, um zu versuchen, .

+1

Ich kann mich nicht genau erinnern, aber ich denke, Generika sind in Ordnung, aber enums/new für die Syntax wurden nicht unterstützt. Es könnte in späterem Java behoben worden sein, aber zu der Zeit, als ich schaute, war es kaum benutzbar. Das war einer der Gründe, warum ich stattdessen retroweaver benutze. – ptyx

+1

Leider funktioniert das nicht. javac akzeptiert keine höhere Quelle als die Zielversion. Sie haben also nur die Wahl zwischen einem Fehler beim Kompilieren und einem Ergebnis, das auf Ihrer Zielplattform nicht ausgeführt wird. –

+1

Die Sonne "Javac" kann nicht tun (nicht?) Dies tun. Der Eclipse-Compiler "ecj" kann. Es kann leicht in die beiden Kompilierungsaufgaben von ant und maven java integriert werden. –

0

Hier zwei weitere Tools, die ich (in Verbindung mit von Retrotranslator Seite) gefunden: