Versionsüberprüfung - 1.6 compiliert soll auch unter 1.4 laufen



  • Situation ist folgende:
    eine .class Datei wird unter 1.6 compiliert
    Diese .class Datei wird auf verschiedene Systeme verteilt, wo es auch möglich ist, dass es dort nur eine Javaversion 1.4 gibt.
    In diesem Fall wird von der Javaruntime folgendes ausgegeben:

    Exception in thread "main" java.lang.UnsupportedClassVersionError: <classname> (Unsupported major.minor version 50.0)
    

    Nun soll dies aber abgefangen werden und eine eigene Ausgabe erzeugt werden. Das würde allerdings wieder voraussetzen, dass das Programm gestartet würde..

    Habe versucht eine Startklasse mit Version 1.4 zu erstellen welche die andere dann Bspw. erst erzeugt und startet - das führte dann aber zu:

    bad class file: .\<classname>.class
    class file has wrong version 50.0, should be 48.0
    

    Auch unter 1.6 compilieren mit den optionen -source und -target ging nicht da eben auch spezielle Konstrukte aus 1.6 verwendet werden.

    Gibt es eine Möglichkeit unter 1.6 erzeugte class Dateien zum laufen zu bekommen oder sowas wie einen "Loader" in 1.4 vorzuschalten?



  • nein und ehrlich gesagt kann ich mir nur schwer vorstellen das es sowas wirklich gibt, erst recht wenn du 1.6er code verwendest. alternativ habe ich die frage nicht richtig verstanden

    mir wäre neu das es möglich ist 1.6er code unter 1.4 laufen zu lassen. die einzige mir bekannte möglichkeit ist die von dir bereits angesprochene, unter 1.6 als 1.4 zu kompilieren. von dem her wird wohl nichts anderes übrig bleiben als die 1.6er konstrukte unter 1.4 lauffähig zu machen bzw umzuschreiben und dann diesen weg zu gehen

    solltest du dennoch einen weg finden den 1.6er code unter 1.4 laufen zu lassen wäre ich über eine anleitung dankbar. eventuell geht es ja in speziellen fällen oder unter gewissen bedingungen doch :xmas1:



  • Vielleicht ein Programm laden, welches die Fehlermeldung ausgibt, oder das eigentliche Programm startet, schreiben, dann sind das aber mehrere Dateien, die weiterzugeben sind ...



  • Da bleibst dir nur übrig darauf zu bestehen, auf 1.5 oder 1.6 zu aktualisieren oder du musst 1.4 Code schreiben. Also keine Annotationen, foreach, Generics, usw.



  • DEvent schrieb:

    Da bleibst dir nur übrig darauf zu bestehen, auf 1.5 oder 1.6 zu aktualisieren oder du musst 1.4 Code schreiben. Also keine Annotationen, foreach, Generics, usw.

    warum würde den 1.5 reichen wenn "1.6er code" verwendet wird?



  • 1.5 schrieb:

    DEvent schrieb:

    Da bleibst dir nur übrig darauf zu bestehen, auf 1.5 oder 1.6 zu aktualisieren oder du musst 1.4 Code schreiben. Also keine Annotationen, foreach, Generics, usw.

    warum würde den 1.5 reichen wenn "1.6er code" verwendet wird?

    IMHO wurden keine neue Sprachfeatures in 1.6 aufgenommen. Solange man also keine 1.6er Klassen verwendet, kann man ohne weiteres für 1.5 kompilieren.


Anmelden zum Antworten