# Abwärtskompatibilität



## Guest (17. Okt 2007)

Hi,

ich benutze Netbeans und habe folgende Frage:

Wenn ich ein Programm schreibe und das unter JAVA 6 kompiliere (auch alte Versionen sind installiert), merkt das IDE dann, dass auch eine niedere Version genügen würde? Sprich das mein Programm auch unter 1.2 laufen würde und er dann automatisch das ältere SDK nimmt? Oder ist das garnicht nötig und die Programme laufen so oder so auch bei älteren Java-Versionen?

Sprich: Ist ein Programm was unter dem neuestem Java erstellt wurde unter Umständen auch bei alten Versionen lauffähig bzw. wie kann man das IDE automatisch versuchen lassen die älteste Version zum kompilieren zu benutzen und welche Folgen könnte das haben?


----------



## Guest (17. Okt 2007)

Dein Programm ist so lange auch unter älteren JRE-Versionen lauffähig, wie du keine der neuen Funktionalitäten verwendest.

Wenn du nur Funktionen aus 1.2 verwendest, sollte dein Programm (auch wenn es mit Java6 kompiliert wurde) auch unter 1.2 lauffähig sein. 

So bald du allerdings neuere Funktionalitäten verwendest (z. B. Generics) ist dein Programm nicht mehr mit älteren JREs ablauffähig (für Generics z. B. benötigt man mind. Java5)


----------



## Gast (17. Okt 2007)

Hallo,



> und er dann automatisch das ältere SDK nimmt?


Nein tut er nicht. Wieso auch wenn man eine aeltere Version haben moechte kann man das beim compilen einstellen.



> Oder ist das garnicht nötig und die Programme laufen so oder so auch bei älteren Java-Versionen?


Nein Java 1.6 laeuft nicht mit 1.5 usw.. Aber 1.5 laeuft mit 1.6. (Das nennt man Abwaertskompalitaet!)

Abschliessende Frage:

Wieso das Ganze ?

Word, Office usw. eigentlich alle Programme die ich kenne speichern normalerweise NIEMALS in einer aelteren Version....

weitere Anmerkung:

Es ist fast immer sinnvoll mit den modernsten Versionen zu arbeiten. Sprich wenn heutzutage jemand noch mit Java 1.2 arbeitet ist dem nicht zu helfen, z.B. keine Bugfixes etc. ...


----------



## Guest (17. Okt 2007)

Und wer hat jetzt Recht?

2 Antworten, 2 Meinungen.

Zu dem zweitem Gast: Natürlich kann man nicht von jedem User verlangen immer auf dem neuestem Stand zu sein. Es gibt Benutzer ohne einen Internetzugang und desweiteren ist Java 5 doch auch immernoch stark verbreitet.


----------



## RoNa (17. Okt 2007)

Gast hat gesagt.:
			
		

> Es ist fast immer sinnvoll mit den modernsten Versionen zu arbeiten. Sprich wenn heutzutage jemand noch mit Java 1.2 arbeitet ist dem nicht zu helfen, z.B. keine Bugfixes etc. ...



Dito, man sollte bemüht sein, mit den neusten Versionen zu arbeiten. Manchmal hat man aber auf die verwendete Version keinen direkten Einfluss. Beispiele: Version auf dem Application Server ( WebSphere 6.0 unterstützt nur Java 1.4 ), installierte Version bei dem Webhoster, etc.

Zu eigentlichen Frage: Die IDE's unterstützen ds nicht automatisch, aber man kann es manuell machen. Einfach mehrere Versionen installieren und versuchen das Projekt-JDK _runter zu schrauben_.

In Eclipse geht es mit _Installed JRE_

Gruß,

Robert


----------



## Guest (17. Okt 2007)

Also kann man unter Java6 erstellte Programme NIE unter Java 1.2 oder so ausführen, auch wenn es nur ein simples System.out.println("") oder ähnlich ist?


----------



## RoNa (17. Okt 2007)

Anonymous hat gesagt.:
			
		

> Also kann man unter Java6 erstellte Programme NIE unter Java 1.2 oder so ausführen, auch wenn es nur ein simples System.out.println("") oder ähnlich ist?



Genau. Entscheidend ist die Java-Version, die Du für die Kompilierung benutzt. Wenn Du es mit Java 6 kompiliert hast, kannst Du es vergessen.

Gruß,

Robert


----------



## Gast (17. Okt 2007)

> Also kann man unter Java6 erstellte Programme NIE unter Java 1.2 oder so ausführen, auch wenn es nur ein simples System.out.println("") oder ähnlich ist?



Ja, dann gibt es eine Wrong Version Exception, wenn ich mich nicht komplett irren sollte.



> Dito, man sollte bemüht sein, mit den neusten Versionen zu arbeiten. Manchmal hat man aber auf die verwendete Version keinen direkten Einfluss. Beispiele: Version auf dem Application Server ( WebSphere 6.0 unterstützt nur Java 1.4 ), installierte Version bei dem Webhoster, etc.



Na ja dann sollte man sich ueberlegen, ob das noch die richtige Umgebung ist....

Mal ein Bsp. aus der Praxis:

ITAdmin: Nein wir koennen keine neuen Versionen benutzen, dann koennte alles zusammenbrechen...

Entwickler: Ohne Java 1.5 ist eine moderne Softwareentwicklung nicht moeglich.

Resultat: ITAdmin musste sich einen neuen Job suchen...

Sprich: Was ist denn wenn auf dem Server gar kein Java laeuft, dann wird in Ruby gekodet oder was ? (und Java 1.4 ist aus meiner Sicht KEIN Java mehr (keine Annotations, keine Generics und und und ).


----------



## maki (17. Okt 2007)

> Abschliessende Frage:
> 
> Wieso das Ganze ?
> 
> Word, Office usw. eigentlich alle Programme die ich kenne speichern normalerweise NIEMALS in einer aelteren Version....


NIEMALS???
Ach wirklich?

Geh doch mal auf "Speichern unter..."


----------



## maki (17. Okt 2007)

> Mal ein Bsp. aus der Praxis:
> 
> ITAdmin: Nein wir koennen keine neuen Versionen benutzen, dann koennte alles zusammenbrechen...
> 
> ...


Das muss aber eine sehr komische (kleine?) Firma gewesen sein.

In der Realität sieht es so aus:
Man hat vorgaben an die man sich halten muss.
Dazu kann auch die zu verwendende Java Version zählen.

Oder meinst du Leute geben zig tausende € für zB. einen WebSphere Server aus um ihn dann nicht zu benutzen?


----------



## byte (17. Okt 2007)

Anonymous hat gesagt.:
			
		

> Also kann man unter Java6 erstellte Programme NIE unter Java 1.2 oder so ausführen, auch wenn es nur ein simples System.out.println("") oder ähnlich ist?


Du kannst beim Kompilieren die Version einstellen. Es ist somit auch möglich, mit JDK 6 z.B. für Java 1.4 zu kompilieren. Dann kannst Du das Programm auch mit JRE 1.4 starten. Allerdings darfst Du dann halt nur Klassen und Sprachfeatures benutzen, die es in 1.4 gibt.


----------



## Gast (17. Okt 2007)

> NIEMALS???
> Ach wirklich?
> 
> Geh doch mal auf "Speichern unter..."



Das bezog sich auf eine automatische Erkennung der benoetigten Version. Sprich wenn keine Funktion von V20 benoetigt wird automatisch Speichern V15 benutzt und DAS ist mir noch nie untergekommen!!!

Aber natuerlich ist es moeglich Dinge in aelteren Veriosnen manuell zu speichern. Das naechste Mal werde ich mich deutlicher ausdruecken, so das der Zusammenhang jedem klar wird.


----------



## maki (17. Okt 2007)

> Das bezog sich auf eine automatische Erkennung der benoetigten Version. Sprich wenn keine Funktion von V20 benoetigt wird automatisch Speichern V15 benutzt und DAS ist mir noch nie untergekommen!!!


Das ist auch bei Java nicht so, lies doch zB. mal was byto geschrieben hat 

Im Prinzip sind Office und Java in dieser hinsicht gar nicht mal so unähnlich, ausser das bei modernen IDE meist schon eine Version voreingestellt ist, während bei Offie Standardmässig immer im aktuellen Format gespeichert wird.

Bei beiden kann man für ältere Versionen  abspeichern/kompilieren.

(Hätte nie gedacht das ich mal Gemeinsamkeiten bei Office und Java finden werde..)


----------



## Gast (17. Okt 2007)

> In der Realität sieht es so aus:
> Man hat vorgaben an die man sich halten muss.
> Dazu kann auch die zu verwendende Java Version zählen.



Du hast Recht war ein komisches Unternehmen aber mit ca. 100 Mitarbeitern... und es kann auch vorgaben geben an die man sich halten muss sinnvolle und nicht sinnvolle....

Aber mal im Ernst, wenn dir jemand die Vorgabe gibt du darfst nicht eclispe oder eine andere IDE verwenden, sondern musst mit TextPad oder so entwickeln, wuerdest du das machen ? Also ich nicht...

Anders ausgedrueckt du sagst ja auch nicht zum Bauarbeiter; bau den Tunnel mit Schaufel und Sparten, weil wird die gerade gekauft haben, sondern gibst ihm vernueftige Maschinen, denn sonst wird das ein ziemlich schlechter und teurer Tunnel...


----------



## maki (17. Okt 2007)

> Aber mal im Ernst, wenn dir jemand die Vorgabe gibt du darfst nicht eclispe oder eine andere IDE verwenden, sondern musst mit TextPad oder so entwickeln, wuerdest du das machen ? Also ich nicht...


Doch, das gibt es auch.

Wiedermal bei IBM 

Früher musste ich den WSAD (WebSphere Studio Application Developer) verwenden um für Websphere zu schreiben, heute wäre es wahrscheinlich RAD.

Man kann sich gewisse Dinge nicht aussuchen.

In meinem aktuellen Projekt (JSF 1.1, EJB 2.1, Hibernate 3.1 und noch 'ne Menge eigener Frameworks) kann ich auch nicht statt Exadel Studio Pro eine andere IDE verwenden, alle Entwikler müssen diesselbe IDE verwenden, da es viel zu aufwändig ist, dass Projekt für eine  andere IDE zu konfigurieren und es viel einfacher ist mit IDE Problemen umzugehen, wenn alle dasselbe verwenden.

Dann kann es natürlich auch sein, dass der Kunde eine vorgegebene Infrastruktur hat, zB. will ein Kunde, der ausschliesslich nur MS SQL Server als DB verwendet, keine Anwendung die nur mit Oracle läuft.

Alles schon erlebt... da muss man flexibel bleiben


----------



## byte (17. Okt 2007)

Gast hat gesagt.:
			
		

> Sprich: Was ist denn wenn auf dem Server gar kein Java laeuft, dann wird in Ruby gekodet oder was ? (und Java 1.4 ist aus meiner Sicht KEIN Java mehr (keine Annotations, keine Generics und und und ).


Schonmal drüber nachgedacht, dass es Projekte gibt, die eine (oder gar mehrere) Java-Versionen überleben? Nicht jedes Projekt wird sofort auf eine neue Java-Version umgestellt. Kann daran liegen, dass es bei großen Projekten nicht problemlos möglich ist sondern einen gewissen Arbeitsaufwand darstellt. Manchmal sind es auch einfach Konzernentscheidungen. Da dauert es eine Zeit lang, bis neue Softwareversionen für den Einsatz freigegeben werden.


----------



## Wildcard (17. Okt 2007)

Java 6 produziert schnelleren (nur mit Java 6 kompatiblen) Bytecode. Es ist also nicht lediglich eine Frage der verwendeten Methoden/Sprachfeatures.


----------



## Guest (17. Okt 2007)

Okay danke für eure Antworten.

Das letzte was Wildcard schrieb hat mich überzeugt, doch auf die aktuellste Version zuzugreifen.

Eine Frage stellt sich mir dann aber wieder:

Ich benutze das SDK 1.6.0.2 Ist die Mindestvorraussetzung dann 1.6.0.2 oder genügt 1.6.0.0. Zählen Bugfixes auch unter den Fall das es dann nicht ausführbar ist?


----------



## Wildcard (17. Okt 2007)

Nur die major version (1.6) ist entscheidend.


----------



## Guest (17. Okt 2007)

Okay, dankeschön


----------

