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.

Im Testing-Zweig von Debian (künftige Version "Lenny") sind Java5 und Java6 verfügbar: --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

Sun und IBM liefern Java für Linux#

Freie Java-VMs#

Tags:  Debian, Java

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-37) was last changed on 23-May-2010 17:38 by ThomasBayen