Wie garantiere ich Abwärtskompatibilität?

Hallo,

wie kann ich javac dazu bringen, die Konstrukte (und vor allem
Methoden) beim Compilieren als Fehler anzuzeigen, die für eine
gegebene VM nicht zur Verfügung stehen. Konkret: habe 1.6 installiert
und benutzte die Methode String.isEmpty() (hat mir Eclipse einfach
vorgeschlagen) ohne zu bemerken, dass diese erst ab 1.6 verfügbar
ist. Ich habe aber beim Compilieren sowohl source=1.4 und target=1.4
angegeben, aber trotzdem lässt das der Compiler durchgehen; er
compilierte alles. Auf einer älteren VM an einem anderen Rechner gibt
es dann eine Exception (NoSuchMethodException oder so ähnlich).
Anscheinend interessiert den Compiler die @since-Tags im Quelltext
nicht. Habe aber gar keine Lust, jede einzelne Zeile meines
Quellcodes nach zu neuen Methoden zu durchsuchen.

Also: Gibt es ein Tool, mit dem ich ein Programm auf aktueller VM auf
Kompatibilität mit einer älteren VM prüfen kann, ohne diese zu
installieren?

Gruß,

Robert

Ich habe aber beim Compilieren sowohl source=1.4 und
target=1.4 angegeben, aber trotzdem lässt das der Compiler durchgehen; :er compilierte alles.

Versuchs mal mit: javac -target 1.4 (mit „-“ und ohne „=“).

Im Eclipse musst du unter Preferences/Java/Complier eigentlich nur die JDK Compliance auf das von dir gewünschte Level setzen, in deinem Fall auf 1.4.

Viel Erfolg,
Chris

Ich habe aber beim Compilieren sowohl source=1.4 und
target=1.4 angegeben, aber trotzdem lässt das der Compiler

durchgehen; :er compilierte alles.

Versuchs mal mit: javac -target 1.4 (mit „-“ und ohne „=“).

Im Eclipse musst du unter Preferences/Java/Complier eigentlich
nur die JDK Compliance auf das von dir gewünschte Level
setzen, in deinem Fall auf 1.4.

Hi Chris,

ich weiß schon, habs auch direkt mit javac probiert; ich meinte mit
source=1.4 die entsprechende Einstellung in der build.xml von Ant.
JDK-Compliance in Eclipse tut an sich auch nichts anderes als source
zu setzen. Target wird sowieso erst beim AUSFÜHREN des Codes
interessant, mir geht’s darum, dass der Compiler das erkennt.
Trotzdem erkennt der Compiler die entsprechenden Funktionen nicht,
was eigentlich nur daran liegen kann, dass die entsprechende
Versionsinformation aus dem Quelltext-Kommentar (@since 1.6)
(woanders kann die Info ja nicht herkommen) nicht mit in die rt.jar
übernommen wird.

Robert

Hallo Robert,

beim Verändern der Compiler-Optionen unter eclipes wird nur sichergestellt, das der erzeugte byte-code zur jeweiligen VM kompatibel ist, also, dass der byte-code als syntaktisch korrekt erkannt wird. Auf die unterstützten Funktionen einer Java Version hat das aber keinen Einfluss. Wenn Du per Compiler sicherstellen willst, dass Du keine neuen Funktionen verwendest, musst Du den entsprechenden Compiler auch verwenden. eclipes unterstützt das recht komfortabel. Installiere einfach eine jre zu der Du kompatibel sein willst und dann änderst Du unter Window-&gt:stuck_out_tongue_winking_eye:references unter der Option Java->Installed JREs die JRE gegen die Du compilieren willst. Evtl. musst Du die neu installierte JRE vorher noch mit „Add“ zu der Auswahl hinzufügen.

Gruß,
Tobias