Java/de

Diese Seite gibt eine Einführung in Java und erklärt die Nutzung von Java unter Gentoo.

Übersicht
Java ist eine Programmiersprache die von Sun Microsystems entwickelt wurde. Die Sprache ist objektorientiert. Javaprogramme sind auf verschiedenen Platformen lauffähig, ohne das sie neu kompiliert werden müssen. Es ist zwar möglich Javacode für spezielle Platformen zu kompilieren, aber gerade die Portabilität ist, neben etwa dem Garbage Collector, ein Grund für Javas Popularität. Um die Platformunabhängigkeit zu gewährleisten, erstellt der Javacompiler sogenannten "Java Bytecode". Dies ist eine Zwischenstufe zwischen Quelltext und ausführbarem Binärformat. Dieser Bytecode wird nicht direkt sondern in einer Java Laufzeitumgebung (JRE) ausgeführt.

Um Java Bytecode auszuführen, muss eine Java Laufzeitumgebung (JRE) installiert sein. Sie stellt die nötigen Bibliotheken sowie die platformabhängige Java Virtual Machine (JVM) bereit. Ein Java Development Kit (JDK) enthält zusätzliche Entwicklungswerkzeuge, etwa einen Java Bytecode Compiler und einen Debugger.

Die Auswahl
Gentoo bietet viele verschiedene Laufzeitumgebungen (JREs) und Development Kits (JDKs) an. Unter anderem sind dies:

Eine JRE/JDK installieren
Um das im aktuellen Profil als Standard gesetzte JDK zu installieren, reicht es  auszuführen. Für die JRE entsprechend.

Einige JDKs und JREs, z.B. die Packete von Sun, besitzen spezielle Lizenzen. Ohne diese, z.B. dlj-1.1, explizit via ACCEPT_LICENSE in zu akzeptieren, können die entsprechenden Packete nicht installiert werden. Informationen wie eine Lizenz in akzeptiert werden kann, befinden sich im Portage Handbuch

Um Schwierigkeiten mit Lizenzen zu vermeiden, kann auf  zurückgegriffen werden. Dies ist eine freie Java Implementierung aus dem OpenJDK Projekt.

Installation von "fetch-restricted" virtuellen Maschinen
Einige JDKs und JREs benötigen einige extra Schritte vor der Installation. weist beim ersten Installationsversuch darauf hin.

In den ebuild-Dateien oder in der Ausgabe von emerge finden sich Informationen wo die benötigten Dateien manuell heruntergeladen werden können. Diese müssen, wie angegeben, in abgelegt werden. Danach kann die Installation wie üblich via emerge durchgeführt werden.

Übersicht
Gentoo bietet die Möglichkeit mehrere JDKs oder JREs parallel zu benutzen.

Mit, können die systemweiten Einstellungen geändert werden. Dazu sind natürlich Root-Rechte nötig. kann aber auch als einfacher Benutzer verwendet werden um die eigenen Einstellungen anzupassen.

Setzen der Standard virtuellen Maschine
Mit dem Kommando  erhält man eine Liste aller auf dem System installierten JDKs und JREs. Eine Beispielausgabe ist:

Der * markiert die aktuelle VM (Systemweit oder für den Benutzer, falls gesetzt). Der Name in eckigen Klammern ist das Handle der entsprechenden VM. Mit  und dem Handle oder der ID kann die aktuelle VM gesetzt werden. Hier ist ein Beispiel:

Setzen der System-VM via Handle (bevorzugte Methode):

Alternativ kann die VM durch die ID gewählt werden:

Als normaler Benutzer, kann  verwendet werden.

Build-Only-VM
Some virtual machines are flagged as build-only due to being EOL and/or containing security vulnerabilities. These virtual machines will not automatically be used by Gentoo for the running of applications using Gentoo launchers (run-java-tool script designed for switching VMs), but will still be available for use by Gentoo's build environment as some packages may require them for building. The setting of these virtual machines as either your system or user VM is strongly discouraged as these VMs will then be used when running the executables, as well as used by any packages not using Gentoo's launcher scripts.

Bevorzugte Build-VM
Beim Bauen von Java-Packeten, kann die verwendete VM von der als System-VM gesetzten abweichen.

Das kann zum Beispiel erforderlich sein, wenn die System-VM Version 1.6 hat und die benötigte VM-Version jedoch 1.5 ist. Während des Bauens wird eine passende Version-1.5 VM gesetzt, ohne die Einstellung der System-VM zu beeinflussen.

Zur Auswahl einer passenden VM existiert (pro Architektur) eine unter eine Liste mit Standardeinstellungen.

Diese Standards (und auch die System-VM) können in  überschrieben werden. Auf diese Weise lässt sich detailliert steuern welche VM beim Bau von Packeten benutzt wird.

Um beispielsweise stets  zu verwenden:

Oder, um  soweit wie möglich zu verwenden, es sei denn Version 1.4 oder 1.3 wird benötigt:

Oder, um VMs verschiedener Anbieter zu nutzen. Etwa, falls eine 1.3 (sic!) VM benötigt wird, in allen anderen Fällen jedoch   verwenden:

Compiler
Der Standard Java Compiler ist. Er ist in jedem JDK enthalten. Neben der Möglichkeit die VM beim Bau zu wählen, besteht auch die Möglichkeit den Compiler festzulegen. Im Wesentlichen wird schlicht eine Liste der gewünschten Compiler in angegeben.

Einige Compiler unterstützen nicht alle -target und -source Argumente. Daher wird die Liste der bevorzugten Compiler durchgegangen bis ein Passender gefunden wurde. Falls kein passender Compiler in der Liste ist, wird javac verwendet. Dieser funktioniert in jedem Fall.

Die folgende Tabelle enthält eine kurze Beschreibung einiger Compiler:

Setzen des standard Klassenpfads, CLASSPATH
kann benutzt werden um einen systemweiten oder benutzerspezifischen Klassenpfad zu setzten.

Zu erst ist es zweckmäßig eine Liste mit auf dem System verfügbaren Java-Bibliotheken zu erstellen. Dies sind Kandidaten für die Aufnahme in CLASSPATH.

Hier sind die Namen in eckigen Klammern die IDs oder Handles die an  übergeben werden können. Hier ist ein Beispiel:

Es ist notwendig die Umgebung durch "sourcen" von oder durch Ab- und Anmelden zu aktualisieren.

Für Benutzer erstellt  die Datei. Diese sollte dann vom Shell-Profil gesourced werden.

Sourcen des benutzerspezifischen Klassenpfads

Um einen systemweiten Klassenpfad zu setzen, kann folgendes in Shell-Profil eingetragen werden. Wie bereits erwähnt ist aber dringend davon abzuraten.

Installation eines Plugins
Ein Java-Plugin für einen Webbrowser kann installiert werden in dem bei der Installation der VM das USE-Flag  angegeben wird.

Portage erlaubt es mehrere Versionen von Java-Plugins gleichzeitig installiert zu haben. Der Browser kann natürlich nur eines davon verwenden. Die verfügbaren Plugins können wie folgt angezeigt werden:

Um zum Beispiel  als aktives Browser-Plugin zu setzen:

Wie folgt kann überprüft werden, ob das Setzen erfolgreich war:

Auf der Seite Java.com kann das aktive Java-Plugin überprüft werden. Wird ein Mozilla-basierter Browser benutzt, kann das Java-Plugin auch durch Eingabe von  in die Adresszeile überprüft werden.

Plugins auf Multilib-Systemen
Wird ein 32-bit/64-bit multilib-System verwendet (etwa AMD64), dann kann ein 32-bit oder ein 64-bit Java-Plugin verwendet werden. Wenn nichts dagegen spricht, empfiehlt sich die Verwendung eines nativen 64-bit Plugins für 64-bit Browser.

Mehrere native 64-bit Browser-Plugins sind verfügbar. Sowohl das JDK  als auch die JRE   enthalten Browser-Plugins. Es reicht eines von beiden mit gesetztem  USE-Flag zu installieren.

Um ein 32-bit Plugin für einen 32-bit Browser zu verwenden, muss zusätzlich  mit   USE-Flag installiert werden.

Eine Liste mit verfügbaren Plugins erhält man durch:

Via eselect kann das gewünschte Plugin gewählt werden:

Eine erneute Auflistung zeigt die aktuelle Wahl:

Setzen der USE-Flags
Für mehr Informationen über USE-Flags sei auf dasUSE-Flag Kapitel im Gentoo-Handbuch verwiesen.

Die USE-Flags

 * java aktiviert die Java Unterstützung in diversen Programmen.
 * nsplugin fügt Unterstüzung für Java-Browser-Plugins hinzu. Die wird zur Benutzung von Java-Applets im Webbrowser benötigt.
 * source installiert ein Archiv mit den Quelltexten des Packets. Die wird typischerweise von IDEs um den Code von verendeten Bibliotheken anzuzeigen.
 * jce aktiviert Unterstützung für die Java Cryptographic Engine.
 * doc, für Java-Packete wird mit Hilfe von javadoc eine API-Dokumentation erstellt.

Offline verfügbares Material

 * java-config man Page

Online Material

 * The Java Project Page
 * The gentoo-java, gentoo-user, and gentoo-dev mailing list archives
 * #gentoo and #gentoo-java on IRC
 * Wikipedia's entry for Java
 * If you have suggestions or questions regarding this document, please email the Gentoo Java team: