!!!Java unter Debian

An sich ist Java ja eine gute Idee: Man ist völlig
plattformunabhängig, überall wird die gleiche Sprache gesprochen,
Java ist überall vorinstalliert etc. Leider sah die Realität eine ganze Zeit lang aus
der Sicht eines Nicht-Java-Gurus wie mir etwas trauriger aus. :-(
Bereits mehrere Male hatte ich es mit Java-Programmen zu tun, die
ich als Laie "mal eben" unter Debian ausprobieren wollte. Dabei
musste ich jedes mal Java neu installieren und wusste nicht mehr,
woher ich das nun nehmen soll... .

Diese Zeiten sind seit Etch (Debian 4.0) vorbei.
War es bislang so, dass man Java immer wieder von der Herstellerseite bei Sun herunterladen musste, kann nun 
mit apt Java (JRE oderauch JDK) einfach installiert werden. 

Seit Anfang 2007 gibt es offizielle Debian-Pakete mit der Sun-VM. Alternativ sind auch andere, richtig "freie", VMs in Debian enthalten. Diese beiden Wege sind zum heutigen Zeitpunkt die "Empfehlung der Redaktion".  --ThomasBayen

Für Debian Etch (aka 4.0) gibt es Java 1.5.0 im Zweig "non-free". Java 6 kann man als Backport installieren.

* http://packages.debian.org/etch/sun-java5-jre
* http://packages.debian.org/etch-backports/sun-java6-jre

Im Testing-Zweig von Debian (künftige Version "Lenny") sind Java5 und Java6 verfügbar:

* http://packages.debian.org/lenny/sun-java5-jre
* http://packages.debian.org/lenny/sun-java6-jre

--PeterHormanns

: Dank Ubuntu wurden neue Lizenzen gemacht und seit Sun mit "Java wird OpenSource" einen neuen Weg eingeschlagen hat ist es in Zukunft bestimmt weiterhin einfach zu installieren sein.

!!Das Original von Sun (so war es)

Man lädt sich das SDK für Linux als .bin-Datei von
[http://java.sun.com] herunter.
Dann installiert man das Paket java-package (in Debian/contrib):

  apt-get install java-package

Damit wird das Skript make-jpkg installiert, mit dem man aus der
.bin-Datei ein Debian-Paket erzeugt. Das wird dann ganz normal
installiert. Zum Beispiel:

  fakeroot make-jpkg jre-1_5_0_02-linux-i586.bin
  dpkg -i sun-j2re1.5_1.5.0+update02_i386.deb

Übrigens kann ''java-package'' auch die IBM-Implementierung von
Java zu einem Paket machen. Diese läuft ebenfalls anstandslos unter
Debian Linux. Im Gegenteil ist mir mit dem Java von Sun mein
Eclipse auf einem UML-System dauernd abgestürzt - mit dem IBM-Java
gehts. -- ThomasBayen

!Java 6 mit java-package

Java 6 wird von java-package in Etch nicht unterstützt, was sich in der Fehlermeldung {{{No matching plugin was found.}}} zeigt. Das kann aber leicht angepasst werden:

   cd /usr/share/java-package
   cp -a sun-j2sdk1.5 sun-j2sdk1.6

Editiere die erste Zeile in sun-j2sdk1.6/install

   suffix=j2sdk1.6-sun 

Editiere sun-j2sdk.sh und füge folgendes zur i386 Section:

    "jdk-6u"[0-9]"-linux-i586.bin") # SUPPORTED
            j2se_version=1.6.0+update${archive_name:10:2}
            j2se_expected_min_size=130
            found=true
            ;;

Analog geht das Ganze natürlich auch für JRE.


!!Wirklich Frei

Unter Linux gibt es mittlerweile eine ganze Anzahl von
Java-Virtuellen-Maschinen, die ich für die eigene
Programmentwicklung auf jeden Fall empfehle (wir wollen doch freie
Software entwickeln, oder?):

Die freien Java-Implementierungen sind mittlerweile durchaus in der
Praxis einsetzbar. Ab Kaffe 1.1.3 läuft der Tomcat 4 unter dieser
VM und an Eclipse wird heftig gearbeitet: Mit GCJ 4.0 soll Eclipse
3.1 out of the Box funktionieren!

* Mit dem Gnu-Java-Compiler (GCJ) lassen sich viele Java-Projekte
in Binär-Code übersetzen. Wenn jemand freie Software mit Java
entwickeln will, dann empfehle ich diesen Weg, denn so lassen sich
auch Binärprogramme für Windows kompilieren!

* Auch im Debian-Projekt tut sich einiges. Durch die Fortschritte
bei Kaffe und beim GCJ können viele Java-Bibliotheken und Programme
mit diesen Compilers und Java-VMs übersetzt werden. Sie wandern
dann in die Debian-Main-Distribution. Siehe
http://wiki.debian.org/Java/MoveToMain

!!64-Bit-Systeme

Grundsätzlich funktioniert Java auch auf 64-Bit-Systemen sehr gut. Leider gibt es von Sun jedoch kein richtiges Browser-Plugin, so das Applets und JavaWebStart gehandicapt sind. Hierzu gibt es Hinweise auf der Seite LinuxMit64Bit.
: ein 32 Bit Chroot wird verwendet --JensKapitza



!!mehrere Java-Versionen parallel nutzen

''(Dieser Text basiert auf EMail-Verkehr zwischen ThomasBayen und ThomasThiessen.)''

Ursprung des Problems ist, daß viele Debian-Pakete von Java-Programmen als Paketabhängigkeit nicht die Java-VM von Sun angeben, sondern z.B. mit GCJ vorkompiliert sind.

Grundsätzlich sollte es möglich sein, mehrere Java-Installationen parallel zu betreiben. Das jeweilige Programm hat dann zwei Stellen, über die eine Auswahl getroffen wird. Zum einen startest Du ja ein bestimmtes Executable, um Java zu starten und zum anderen sucht sich dieses dann seine Bibliotheken und sonstigen Krams im Java Installationsverzeichnis zusammen, das man mit der Umgebungsvariable {{$JAVA_HOME}} benennt.


! alternatives-Mechanismus

Die standardmäßig benutzte Installation änderst Du über das Tool "update-alternatives".

  update-alternatives --config java
  update-alternatives --config javac

Informationen, was eingestellt ist, gibts mit

  update-alternatives --display java
  update-alternatives --list javac

 Lies mal die manpage. Aufschlussreich ist auch, mal

  ls -l /etc/alternatives/j* | less -S

anzuzeigen. Das ganze funktioniert so, daß ein Aufruf "{{java}}" auf der Kommandozeile über den normalen Suchpfad für ausführbare Dateien "{{/usr/bin/java}}" ausführt. Dieses ist dann aber ein Softlink auf "{{/etc/alternatives/java}}". Dieses wiederum ist dann ein Link auf die wirklich von Dir ausgewählte Java-Installation. Diese Auswahl kannst Du automatisch vornehmen lassen oder mit update-alternatives beeinflussen. Die automatische Auswahl stellt die Sun-VM immer ganz nach hinten in die Prioritäten-Liste, weil sie nicht frei ist.

! {{$JAVA_HOME}} setzen

Das zweite ist nun, das {{$JAVA_HOME}} anzugeben. Soviel ich weiss, muss man das normalerweise bei aktuellen Versionen nicht mehr machen, weil das "java"-Executable seinen eigenen Pfad erkennt und dann sein eigenes Installationsverzeichnis nimmt ''(kann da jemand was zu sagen, der es genauer weiss?)''. Hast Du das Gefühl, da stimmt was nicht, kannst Du aber immer mit

  export JAVA_HOME /usr/lib/jvm/java-6-sun

diese Umgebungsvariable setzen. Grundsätzlich kann man so auch den Java6 Compiler nehmen, aber die Java5 Bibliotheken oder solche Spielchen. Das ist aber nur selten sinnvoll.

Für speziell Deinen Fall sollte es eigentlich so sein, daß es Deinem ebay-Tool eigentlich egal sein sollte, mit welcher Java-Installation es läuft. Natürlich gibt es Unterschiede, aber es ist recht unwahrscheinlich, daß es ein verbreitetes Jeva-Programm gibt, das mit der Java6se-VM von Sun nicht läuft.

Also installierst Du zuerst java6 von Sun. Dann installierst Du Dein ebay-Tool. Dabei installiert Dir der Debian Paket-Manager unter Umständen allen möglcihen Quatsch dazu. Da das IMHO nicht wirklich nötig ist, weist das auf ein falsch konfiguriertes Paket hin. Vielleicht weist Du den Paket-Maintainer darauf hin, daß er die Paketabhängigkeiten besser ausdrücken sollte.

Da nun zwei VMs installiert sind, hat der Prioritätenmechanismus von update-alternatives die freie VM nach oben geholt. Das erkennst Du mit "{{java -version}}". Du nimmst nun update-alternatives und stellst das wieder zurück. (wieder testen mit "{{java -version}}".) Dann sollten eigentlich alle Programme glücklich laufen.

Sollte Dein ebay-Tool nun wirklich nicht laufen, so benötigst Du dafür ein Startskript, das die Umgebungsvariable JAVA_HOME woandershin setzt und dann ein anderes Executable startet.

! und was ist mit GCJ?!?

Als letzte Problemmöglichkeit könnte es sein, daß Dein Tool GCJ-kompiliert ist. Das ist ein Compiler, der aus Java echte Linux-Executables macht. Ob die Dinger dann noch irgendwie in einer anderen VM laufen, weiss ich nicht. Vielleicht muss man da nur JAVA_HOME setzen, vielleicht ist das zu startende Executable auch erstmal ein Skript, in das man hineinsehen und schlau werden kann...?!? Vielleicht schreibt dazu mal jemand hier, der damit mehr Erfahrung hat.

! und unter Eclipse?

Wenn Du jetzt mit Eclipse arbeitest, sind die Regeln übrigens wieder neu gemischt. Eclipse selber wird mit der Standard-VM gestartet. Mit welcher Du entwickelst, kannst Du dann in den Eclipse-Einstellungen sehen. Dort kannst Du einen Suchlauf starten, der alle VMs auf Deinem System findet. Dann kannst Du eine Standard-VM aussuchen und in jedem Projekt wieder eine eigene auswählen. Dabei hast Du auch die Wahl, nur bestimmte Kriterien anzugeben, so daß Du z.B. eine Java5-Umgebung bekommst, egal, von welchem Hersteller. 

-- ThomasBayen



!!Links
* Status Java in Sarge: http://lists.debian.org/debian-devel-announce/2005/06/msg00002.html
* http://ant.apache.org - Homepage des Java-Buildtools ApacheAnt (vergleichbar mit ''make'')
* Allgemeine Informationen Tips und Tricks auch auf der [Java] Seite der LUG Krefeld
* Anfang 2007 gab es eine DiskussionJavaStart mit jemandem, der neu mit Java anfangen wollte. Dort stehen für Neulinge evtl. auch einige interessante Tips, die hier noch nicht eingearbeitet wurden.

!Sun und IBM liefern Java für Linux
* http://java.sun.com/
* http://java.sun.com/linux/
* http://www.ibm.com/java/

!Freie Java-VMs
* http://www.kaffe.org/
* http://gcc.gnu.org/java/
* http://www.pro-linux.de/berichte/gnu-classpath1.html

[{Tag Debian Java}]