2009-07-07 14 views
1

Ich habe meine Quelle mit Java-Version kompiliert 1.6 unter Verwendung der Parameter -source 1,5 und -target 1,5, und der Compiler muß nicht überhaupt beschweren.Java und „nach vorne“ Kompatiblität Frage

Dennoch wird die Anwendung wegen fehlender Methoden nicht mit Java 1.5 ausgeführt. Natürlich könnte ich einen Teil meines Quellcodes umschreiben, dass er 1.5-konform ist, aber was ich nicht verstehe, ist; sollte der Java Bytecode im unteren Bereich nicht "nach vorne" konform sein?

Werden die Methoden nicht in Bytecode konvertiert? Ist es möglich, die 1.6 libs/methods (zB String.isEmpty()) auf 1.5 Bytecode zu kompilieren und alles ins Archiv zu packen?

Antwort

3

Der vollständige Satz von Kommandozeilen-Optionen, die Sie benötigen, sind:

java -source 1.5 -target 1.5 -bootclasspath /usr/jdk/jdk1.5.0_17/jre/lib/rt.jar 

(Ändern bootclasspath zu aber Ihre Maschinen-Setup ist.)

Natürlich in 1.6 Erweiterungen APIs nicht in 1.5 sein wird. 1.5 ist die meiste Zeit durch das Ende der Nutzungsdauer, also sollten Sie trotzdem ein Mindestmaß von 1,6 in Betracht ziehen.

+0

Nur Problem, Mac OSX, das über sich selbst sagt das einzige Betriebssystem mit voll integriertem Java, unterstützt nicht 1.6:/ –

+0

1.6 ist sicherlich für Mac OS X. Ich glaube, sie haben sogar eine Version des 6u10-Plugin jetzt. Was ich glaube, sie sind leider noch nicht 1.6, standardmäßig auf allen unterstützten Versionen von Mac OS X. –

+0

Ich denke, es ist nur in 64-Bit-Versionen verfügbar –

1

Ich glaube nicht, Java wird den nativen Java-Code rückwärts kompilieren. Also, wenn Sie einen 1.6 Anruf - Sie sind nicht in der Lage, darauf zuzugreifen, in 1.5

+0

Sie können, wenn die JRE, auf der Sie laufen, 1.6 ist, hängt alles davon ab, auf welchem ​​JRE Ihr Code läuft - er stellt die Bibliotheken zur Verfügung. –

6

Wenn Sie grundlegende Java-Bibliothek Methoden meinen, dann nein, diese Methoden werden nicht in Byte-Code konvertiert, wenn Sie kompilieren; Sie wurden bereits von Sun (oder dem JVM-Distributor von Drittanbietern) in Byte-Code kompiliert und auf Ihrem Betriebssystem installiert. Sie sind verwiesen und von Ihrem kompilierten Code verwendet.

1

Sie können die Bibliothek, gegen die Sie kompilieren, als ältere Bibliothek ändern. In Paketen wie Eclipse sollte jedes installierte JDK in einem "Select library" -Fenster erscheinen, in dem Sie auswählen können, für welchen Sie ein JDK kompilieren möchten.

Wenn nicht, sollten Sie es in Ihrem Ant-Datei- oder CLI-Kompilierbefehl überschreiben können.

Wenn Sie auf eine ältere JVM abzielen, müssen Sie dies wirklich tun oder Sie können Anrufe verwenden, die nicht verfügbar sind.

1

Der Quellparameter bewirkt nur, dass der Compiler auf einer Syntaxebene sucht (so würde beispielsweise quellen = 1,4, wenn er auf Generics stößt), aber er beschränkt sich nicht darauf, nur die in der angegebenen Java-Version verfügbaren APIs zu verwenden.

Der Zielparameter bewirkt, dass der Compiler Klassendateien ausgibt, die von einer Laufzeit der angegebenen Version verwendet werden können, aber nicht (wie -source) eine API-Konformität validieren.