Java 1.5 und 1.6



  • Hi,

    Ich möchte ein Programm schreiben, dass unter Java 1.5 läuft, und falls Java 1.6 installiert ist noch mehr Features hat. Auf jedefall soll es als Ausführbares Jar-Archiv vorliegen.
    Bis jetzt hab ich die 1.6 version genommen, kopiert, die zusatzfeatures auskommentiert und mit einem 1.5-er Compiler kompiliert.
    Nachteil: sehr aufwendig, jedesmal wieder neu die sachen auskommentieren und ich hab kein jar-archiv hingekriegt.

    Hat jemand eine Idee, wie ich das problem lösen kann?(Wenn möglich sollte es mit Eclipse lösbar sein).

    Mfg



  • vielleicht so?

    String ver = System.getProperty ("java.version").substring(0,3);
    if (ver.equals("1.6"))
    {
       // use 1.6 features
    }
    

    🙂



  • Es ist vermutlich besser, zu testen, ob die Version größer als 1.6 ist. Sonst kann das Programm nichts mehr, wenn die nächste Javaversion erscheint.



  • <klugscheißermodus>Es ist vermutlich besser, zu testen, ob die Version größer oder gleich als 1.6 ist. Sonst wird die App gar nicht erst akzeptiert.</klugscheißermodus>



  • superklugscheissermodus: deshalb schrieb ich ja 'use 1.6 features' und nichts davor oder danach.
    🙂



  • Ich glaube Witte meinte vielmehr, dass es sinnlos ist erst zur Laufzeit zu testen, da in dem Moment die VM ja bereits mit den 1.6-Features umgehen können muss.

    Ich kenne mich da allerdings auch nicht so aus. Vllt. ist es möglich, die 1.6-Nutzung in extra Klassen auszulagern, die nur dann per Class.forName() geladen werden wenn 1.6 vorhanden ist.



  • +fricky schrieb:

    vielleicht so?

    String ver = System.getProperty ("java.version").substring(0,3);
    if (ver.equals("1.6"))
    {
       // use 1.6 features
    }
    

    🙂

    Das wird so nicht funktionieren. Kompiliert man den Code gegen 1.5, kann man keine 1.6 Features nutzen. Kompiliert man gegen 1.6, kann man das Programm nicht mit einer 1.5er JRE starten.

    Mit OSGi (Eclipse Equinox) lässt sich sowas realisieren. Da kann man für jedes Bundle explizit die nötige JRE konfigurieren (Bundle-RequiredExecutionEnvironment).



  • byto schrieb:

    Das wird so nicht funktionieren. Kompiliert man den Code gegen 1.5, kann man keine 1.6 Features nutzen.

    System.getProperty() liefert doch informationen über die laufzeitumgebung, nicht unter welcher version compiliert wurde.
    🙂



  • +fricky schrieb:

    System.getProperty() liefert doch informationen über die laufzeitumgebung, nicht unter welcher version compiliert wurde.

    Es geht nicht um System.getProperty(), sondern um // use 1.6 features.



  • MFK schrieb:

    +fricky schrieb:

    System.getProperty() liefert doch informationen über die laufzeitumgebung, nicht unter welcher version compiliert wurde.

    Es geht nicht um System.getProperty(), sondern um // use 1.6 features.

    ach so, er will nicht irgendwas zur laufzeit anders machen (wie z.b. blocking deques nutzen, die's unter 1.5 noch nicht gab), sondern angepassten code erzeugen. na, dann muss sowas wie ein präprozessor her.
    🙂


Anmelden zum Antworten