# Kompilieren in anderern Java-Version?



## juandeluca (20. Jun 2012)

Hallo!

Ich habe ein Projekt in NetBeans 1.7.2 mit Java 1.7.

Nun würde ich gerne das gesamte Projekt in eine JAR kompilieren.
Allerdings habe ich einen PPC Mac mit OS X 10.5.8 und leider gibt es wohl kaum eine Möglichkeit eine höhere JRE als die 1.5 darauf laufen zu lassen.

Kann ich mein Java 1.7 Projekt in eine Java 1.5 JAR-Datei kompilieren?

Vielen Dank im Voraus!


----------



## noobadix (20. Jun 2012)

Hi,

jar ist erstmal jar, ohne Versionierung. Es kommt nun beim Ausführen dieser jar darauf an, ob der code, der für java 1.7 geschrieben worden ist, mit einer 1.5 JRE funktioniert, Du müsstest also erstmal die relevanten Unterschiede herausfinden.

Gruß!


----------



## juandeluca (20. Jun 2012)

Nun, derzeitiger Status ist, dass ich eine JAR in Java 1.7 kompiliert habe, die unter Mac mit JRE 1.5 zu Fehlern kommt.

Kann ich denn nicht den Compiler in JavaBeans 1.7.2 irgendwo einstellen, sodass dieser in einer älteren Java-Version kompiliert?

Bei meinem Programm verwende ich nur Standard-Java, d.h ein paar Swing-Elemente usw.. Es sollte ansich alles in 1.5 laufen.

Gibt es einen Weg, das komplette Projekt auf seine Versionsbestandteile zu überprüfen, sodass ich weiß, was ich ändern muss, um es zu einem 1.5-Projekt zu machen?


----------



## Woodstock (20. Jun 2012)

Hallo,



> Kann ich denn nicht den Compiler in JavaBeans 1.7.2 irgendwo einstellen, sodass dieser in einer älteren Java-Version kompiliert?



Project Properties -> Sources -> Source/Binary-Format auf 1.5 stellen...

Dann darfst du allerdings auch keine Klassen/Methoden der neueren JAva-API verwenden... Da wird dich Netbeans nicht 'drauf aufmerksam machen.

Edit: Ich gehe mal davon aus, dass du Netbeans meinst...


----------



## Cola_Colin (20. Jun 2012)

Woodstock hat gesagt.:


> Dann darfst du allerdings auch keine Klassen/Methoden der neueren JAva-API verwenden... Da wird dich Netbeans nicht 'drauf aufmerksam machen.



Tut es das nicht?
Spätestens beim kompilieren wird der Compiler aber sicher Fehler melden.


----------



## juandeluca (20. Jun 2012)

Ok, erfolgreich NetBeans auf 1.5 umgestellt und JAR kompiliert.
Beim Starten der JAR auf dem Mac bekomme ich allerdings einen Fehler:

Befehl: java -jar MeineDatei.jar
Fehler: Exception in thread "main" java.lang.NoClassDefFoundError: javax/swing/GroupLayout$Group

Liegt das an der falschen Library, die ich für das Programm verwende? Wie stelle ich sie auf 1.5 um?


----------



## Cola_Colin (20. Jun 2012)

Wie hier nachzulesen ist:
GroupLayout.Group (Java Platform SE 7 )

gibt es die Klasse erst seit Version 1.6 Der Code ist also schlich inkompatibel zu 1.5 und kann nicht einfach umgestellt werden. Viel mehr musst du die Klassen, die es in 1.5 nicht gab aus dem Programm rauswerfen und es anders programmieren.
Oder du probierst die fehlenden Klassen als eigene zum Projekt hinzuzufügen.


----------



## juandeluca (20. Jun 2012)

Hm, schade. Geht also nicht.



> Oder du probierst die fehlenden Klassen als eigene zum Projekt hinzuzufügen.



Java ist ja OpenSource, d.h. ich könnte doch theoretisch die Klasse GroupLayout.Group und all ihre Abhängigkeiten kopieren. Allerdings stelle ich mir das ein wenig kompliziert vor.

Ist denn meine Idee so ohne Weiteres möglich?


----------



## Cola_Colin (20. Jun 2012)

Ich weiß nicht, wieviel an GroupLayout so dran hängt, es kann schon einiges sein.
Aber in der Theorie geht es sicher, eventuell sind nur ein paar Anpassungen am Code nötig. Vielleicht gibt es auch schon ne Lösung für das Problem "1.6 Klassen in 1.5" Google doch einfach mal


----------



## jgh (20. Jun 2012)

grundsätzlich schon, kann aber viel werden 

aber ich frage mich natürlich wie du überhaupt eine jar mit der version 1.5 erstellen kannst, die Komponenten der 1.6 nutzt..., dann sollte eigentlich dein code einige fehler aufwerfen, oder irre ich mich?!


----------



## juandeluca (20. Jun 2012)

> dann sollte eigentlich dein code einige fehler aufwerfen, oder irre ich mich?!



Jep, du irrst dich! :bae:

Ich bin ehrlich gesagt auch etwas verwundert über dieses nicht gerade erfreuliches Ereignis, aber NetBeans meldet keine Fehler. Auch beim Ausführen mit JRE 7 gibts keine Fehler. Nur auf meinem PPC Mac OS X 10.5.8, wo nur Java 1.5 drauf ist/kann, bekomm ich dann den o.g. Fehler.


----------



## jgh (20. Jun 2012)

na gut, als ich vor einiger Zeit ein Projekt von 7 auf 1.6 umgstellen musste, erhielt ich im Quellcode einige Fehler, bspw. [c]JCombobox<String> jcbGender[/c] warf Compilefehler, allerding arbeite ich mit eclipse


----------



## juandeluca (20. Jun 2012)

> JCombobox


Seltsam, die verwende ich auch, doch meldete er mir bei 1.5 keinen Fehler. ???:L

Ich habe zuvor auch mit Eclipse gearbeitet, jedoch finde ich NetBeans besser. Der UI Manager ist einfach unschlagbar und bei Eclipse gibts nicht wirklich etwas.

Außerdem nimmt einem NetBeans sehr viel ab, was Events und Listeners angeht. Die Codegenerierung und die Sicherheit vor versehentlichem Zerstören funktioniert auch erste Sahne bei NetBeans.

Für mich bleiben daher keine Argumente mehr für Eclipse übrig.


----------



## Cola_Colin (20. Jun 2012)

JComboBox ist vor 1.7 aber nicht ein Generic


----------



## juandeluca (20. Jun 2012)

Jep, man lese <...>


----------



## ConsoleCompiler (21. Jun 2012)

Klingt jetzt vielleicht "n00bish", aber schon mal versucht deine Source-Files via Console mit

```
java -source 1.5 -target 1.5 Klasse.java
```
zu compilen ? Weil spätestens der Oracle-Compiler vom Oracle JDK wird dir da einiges an Fehlern melden wenn du versuchst Klassen zu verwenden die es in 1.5 noch nicht gab.
Wenn irgendeine IDE (gleich ob NetBeans oder Eclipse) meint diese sehr wichtigen Fehlermeldungen zu unterdrücken, oder diese auf Grund des eigenen mitgelieferten Compilers überhaupt nicht kennt, dann würde ich mal wenigstens dafür von der IDE wieder auf Console wechseln.

btw : ein JAR kann man nicht "compilen", denn ein JAR ist lediglich ein ZIP welches um das Java-spezifische Verzeichnis "META-INF/" erweitert wird. Das was du compilen kannst ist dein Source, mehr aber auch nicht. Sowas sollte man eigentlich wissen.

Anmerkung : wenn deine App halt eine bestimmte Java-Version als Minimum vorraussetzt, dann würde ich mir an deiner Stelle nicht mal die Mühe machen versuchen zu wollen es auf einer älteren VM zum laufen zu bringen. Ich würde höchstens die betroffenen User darauf Hinweisen das auf Grund des fehlenden Supports der VM die App das Ziel-System ebenfalls nicht unterstützt ... und fertig.

(Warum versuchen eigentlich immer wieder einige sowas auf biegen und brechen zu "umgehen" nur um dann feststellen zu dürfen das es einfach nicht geht ? Kann man nicht gleich sagen : meine App braucht min. Java7, und Plattformen auf denen diese nicht verfügbar ist werden nicht unterstützt ? Scheinbar denken einige nicht so einfach.)


----------

