Beim kompilieren mit Ant (1.8) bekomme ich die Warnung:
[javac] warning: [options] bootstrap class path not set in conjunction with -source 1.6
Die Eclipse Java Compiler-Option (Prefernces - Window - Java - Compiler) ist der Compiler Compliance Level 1.6 eingestellt; Als installierte JREs habe ich 6.0.39 und 7.0.13 eingestellt. Die Windows Umgebungsvariable "JAVA_HOME" und "PATH" geben ebenfalls auf 1.6 an.
Es ist nur eine Warnung und die Klasse wird auch mit der Versionsnummer 50 (entpricht Java 1.6) erzeugt; trotzdem stört mich die Meldung.
Wenn ich in Ant "source=1.7" (und natürlich dann auch "target=1.7") angebe läuft alles fehlerfrei.
Das heißt also der "bootstrap class path" ist auf 1.7 eingestellt - wo auch immer und ich möchte ihn auf 1.6 haben.
Es gibt keine Möglichkeit sicherzustellen dass das Ding unter 1.6 läuffähig ist, wenn du unter 1.7 kompilierst und nicht den Bootstrap CP setzt.
Der Compiler wird zwar den "richtigen" bytecode (Version) erzeugen, aber der Compiler weiss nicht welche Klassen sich zwischen 1.6 und 1.7 unterscheiden.
Deswegen:
Wenn du schon auf einer neuen Version für eine alte kompilieren willst, dann entweder eine altes JDK nutzen, oder ein neues JDK und dann den Bootstrap CP setzen.
Die Antwort geht dahin, dass ich CrossCompiling-betreibe. Ich habe mir das angeschaut und richtig; ich hatte Ant das Paket tools.jar aus der Version 7 zugeordnet.
Damit ist die Meldung erstmal weg, dafür kommt jetzt massenweise:
[javac] warning: java\lang\Object.class(java\lang:Object.class): major version 51 is newer than 50, the highest major version supported by this compiler.
Das heißt doch, dass der verwendete ClassPath noch die Java 1.7-Umgebung enthält. Das ist aber weder dem BuildPath des Projektes (hier ist JRE6 eingetragen) noch der Preferences-Einstellung des Java-Compilers (siehe oben) noch der classpath Einstellung des-Ant-Aufrufs zu entnehmen:
Der Fehler für den ich hier gepostet habe ist zwar behoben, aber nach wie vor ist mir die Sicherstellung der richtigen Kompilerversion in Eclipse im Augenblick nicht transparent.
Es gibt keine Möglichkeit sicherzustellen dass das Ding unter 1.6 läuffähig ist, wenn du unter 1.7 kompilierst und nicht den Bootstrap CP setzt.
Der Compiler wird zwar den "richtigen" bytecode (Version) erzeugen, aber der Compiler weiss nicht welche Klassen sich zwischen 1.6 und 1.7 unterscheiden.
Deswegen:
Wenn du schon auf einer neuen Version für eine alte kompilieren willst, dann entweder eine altes JDK nutzen, oder ein neues JDK und dann den Bootstrap CP setzen.