Java

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Java and the translation is 94% complete.
Resources

Java ist eine ursprünglich von Sun Microsystems entwickelte Programmiersprache, die eine Laufzeitumgebung verwendet, um die Ausführung von in Java entwickelten Anwendungen auf verschiedenen Plattformen zu ermöglichen. Es ist eine beliebte Wahl für Entwickler, die plattformübergreifende Anwendungen erstellen wollen.

Was ist Java?

Ü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 der automatischen Speicherverwaltung, 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 vom Betriebssystem sondern in einer JVM (Java Virtual Machine) ausgeführt.

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

JVM-Sprachen

Die Java Virtual Machine wird nicht ausschließlich von der Java Programmiersprache verwendet. Mehrere Programmiersprachen verwenden die Java-Plattform und laufen auf der JVM. Beispiele für solche Sprachen sind: Clojure, Apache Groovy, Kotlin oder Scala.

Eine virtuelle Maschine installieren

Die Auswahl

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

Anbieter JRE
IcedTea Offenes Java SE (ehemals icedtea6-bin) dev-java/icedtea und dev-java/icedtea-bin
OpenJDK dev-java/openjdk und dev-java/openjdk-bin
Oracles Java dev-java/oracle-jdk-bin dev-java/oracle-jre-bin
Der GCJ IcedTea GNU GCC Java (derzeit IcedTea-7) dev-java/icedtea sys-devel/gcc USE="gcj"

Ein JRE/JDK installieren

Um das Standard JDK des Profils zu installieren, führen Sie dies aus:

root #emerge --ask virtual/jdk

Um die Standard JRE des Profils zu installieren, führen Sie dies aus:

root #emerge --ask virtual/jre
Warnung
Einige JDKs und JREs, darunter auch Oracle-Pakete, erfordern die Zustimmung zu einem EULA (Endbenutzer-Lizenzvertrag). Wenn die Lizenz (z.B. dlj-1.1) nicht in der Variable ACCEPT_LICENSE (zu finden in /etc/portage/make.conf) aufgeführt ist, kann das JDK/JRE nicht installiert werden. Für weitere Informationen, wie man akzeptable Lizenzen zu make.conf hinzufügt, lesen Sie das Lizenzen Kapitel des Portage Handbuchs.

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

Notiz
Beachten Sie, dass jedes JDK ein JRE enthält; die Installation eines JRE ist nicht notwendig, wenn ein JDK emerged wurde.

Installation der IcedTea-GCJ-virtuellen-Maschine

Wichtig
gcj ist veraltet und wird in GCC Versionen 7.0 und höher entfernt. Er ist ab GCC 6.0 auf Gentoo nicht mehr verfügbar. Betrachten Sie diesen Abschnitt als veraltet.

The IcedTea virtual machine is provided in source code and requires compilation by a Java bytecode compiler. This bootstrapping can be executed by the GNU Compiler for Java (GCJ). This compiler is available when GCC is built with the gcj USE flag.

Wenn die GCC mit diesem USE-Flag neu gebaut wird, kann das Paket dev-java/icedtea installiert werden. Aufgrund eines Portage-Fehlers müssen Benutzer zuerst dev-java/gcj-jdk und dev-java/ant-core explizit installieren, wenn sie nicht bereits vorhanden sind.

root #emerge --ask --oneshot dev-java/gcj-jdk dev-java/ant-core
root #emerge --ask dev-java/icedtea:7

Installation von "fetch-restricted" virtuellen Maschinen

Einige JDKs und JREs erfordern zusätzliche Konfigurationsschritte. Emergen Sie die Pakete wie gewöhnlich. Wenn zusätzliche Schritte erforderlich sind, geben die Ebuilds dem Benutzer Anweisungen, wohin er gehen und was er herunterladen muss.

Laden Sie die angezeigte(n) Datei(en) in /var/cache/distfiles (oder den Wert der Variable DISTDIR) herunter. Sobald die Dateien sich in den richtigen Verzeichnissen befinden, führen Sie emerge erneut aus, woraufhin die Installation des JRE/JDK beginnt.

Einrichten eines Headless JRE

Manchmal besteht kein Bedarf an einem vollständigen JRE mit allen Funktionen von Java. Die Verwendung von Java auf einem Server erfordert oft keine GUI-, Grafik-, Sound- oder sogar Drucker bezogenen Funktionen. Um eine vereinfachte (manchmal auch als headless bezeichnete) JRE zu installieren, müssen einige USE-Flags für die ausgewählte JRE-Variante geändert werden.

DATEI /etc/portage/package.useErforderliche USE-Flag-Änderungen
dev-java/icedtea headless-awt -alsa -cups
dev-java/icedtea-bin headless-awt -alsa -cups
dev-java/oracle-jre-bin headless-awt -alsa -cups

Abhängig vom aktuellen Gentoo-Profil könnte dies bereits der Fall sein. Wie üblich können die USE-Flag-Einstellungen, die für ein bestimmtes Paket gelten, überprüft werden, indem man emerge im Pretend-Modus ausführt:

user $emerge --pretend --verbose virtual/jre

Die Java Virtual Machine konfigurieren

Übersicht

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

Mit dem java-config Werkzeug und Root-Rechten, kann eine systemweite Java Virtual Machine (VM) festgelegt werden. Benutzer können auch java-config verwenden, um ihre persönliche VM auf Benutzerbasis festzulegen.

Notiz
eselect kann auch verwendet werden, um die System- und Benutzer-VM zu ändern. Siehe eselect java-vm help.

Setzen der Standard virtuellen Maschine

Wenn Sie den Befehl java-config mit der Option --list-available-vms ausführen, erhalten Sie eine Liste aller auf dem System installierten JREs und JDKs. Hier ist ein Beispiel für die Ausgabe:

root #java-config --list-available-vms
The following VMs are available for generation-2:
1)      IcedTea JDK 7.2.6.3 [icedtea-7]
2)      IcedTea JDK 3.0.1 [icedtea-8]
Notiz
Virtuelle Maschinen die als 'Build Only' markiert sind können Sicherheitslücken enthalten oder nicht mehr aktiv betreut (end of life, EOL) sein. Gentoo empfiehlt diese nicht als System- oder Benutzer-VM zu setzen. Bitten lesen Sie Build Only VM für mehr Informationen.

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

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

root #java-config --set-system-vm icedtea-7
Now using icedtea-7 as your generation-2 system JVM

Alternative Methode: Auswahl der VM nach der Nummer des Handles:

root #java-config --set-system-vm 3
Now using icedtea-7 as your generation-2 system JVM

Als normaler Benutzer, verwenden Sie java-config --set-user-vm.

Notiz
source-ing des Profils für bestehende Shell-Sitzungen ist normalerweise nicht erforderlich, wenn Sie die Benutzer- oder System-VM ändern. Die einzige Ausnahme ist, dass Variablen wie JAVA_HOME immer noch auf den alten Ort verweisen oder zur System-VM zurückkehren, nachdem eine Benutzer-VM zum ersten Mal gesetzt wurde

.

Build-Only-VM

Einige virtuelle Machinen sind als "build-only" markiert. Dies kann an bekannten Sicherheitslücken oder an der fehlenden aktiven Betreuung des Projekts liegen. Diese VMs werden von Gentoo nicht automatisch zum Ausführen von Anwendungen mithilfe von Gentoo-Launchern (run-java-tool-Skript für den Wechsel von VMs) benutzt, trotzdem sind sie noch verfügbar, da sie von einigen Pakete beim kompilieren benötigt werden. Vom Setzen solcher VMs als aktive System- oder Benutzer-VM wird dringend abgeraten. Andernfalls werden diese VMs bei der Ausführung von /usr/bin/{java,javac,..} oder von Paketen die nicht die Gentoo Startskripte benutzen verwendet.

Setzen des standard Klassenpfads, CLASSPATH

Warnung
Die Optionen in diesem Abschnitt sind veraltet und werden in Zukunft nicht mehr unterstützt. Es wird daher dringend davon abgeraten sie zu benutzen. Java-Projekte oder Anwendungen verwalten idealerweise ihren Klassenpfad selbst. Wenn explizit ein Klassenpfad via CLASSPATH gesetzt wird, können einige Anwendungen eventuell fehlerhaft ausgeführt werden. Etwa weil sich im Klassenpfad plötzlich Klassen befinden die die Anwendung dort nicht erwartet hat.

java-config kann benutzt werden um einen systemweiten standard CLASSPATH sowie einen benutzerspezifischen standard CLASSPATH zu setzten.

Zuerst werden die auf dem System installierten Java-Bibliotheken aufgelistet, um sie möglicherweise in die Variable CLASSPATH aufzunehmen. Hier ist ein Beispiel für die Ausgabe:

root #java-config --list-available-packages
[xerces-2] The next generation of high performance, fully compliant XML parsers in the Apache Xerces family (/usr/share/xerces-2/package.env)
[junit] Simple framework to write repeatable tests (/usr/share/junit/package.env)
[bsh] BeanShell: A small embeddable Java source interpreter (/usr/share/bsh/package.env)
[bcel] The Byte Code Engineering Library: analyze, create, manipulate Java class files (/usr/share/bcel/package.env)
[log4j] A low-overhead robust logging package for Java (/usr/share/log4j/package.env)
...

Hier sind die Namen in eckigen Klammern die IDs oder Handles die an java-config --set-system-classpath übergeben werden können. Hier ist ein Beispiel:

root #java-config --set-system-classpath log4j,xerces-2
Notiz
Das aktuelle Arbeitsverzeichnis (.) ist nicht Teil des systemweiten Klassenpfads. Dies sollte im Loginprofil des Systems angepasst werden.

Aktualisieren Sie die Umgebung, indem Sie sich aus- und wieder einloggen oder indem Sie source /etc/profile eingeben.

Für Benutzer erstellt java-config --set-user-classpath die Datei ~/.gentoo/java-env-classpath. Diese sollte dann vom Shell-Profil gesourced werden.

CODE Sourcing user specific classpath
if [[ -f "${HOME}/.gentoo/java-env-classpath" ]]; then
       source ${HOME}/.gentoo/java-env-classpath
fi

Wenn Sie einen systemweiten oder benutzerdefinierten Klassenpfad wünschen, fügen Sie etwas wie das Folgende zum Profil der Shell hinzu. Hiervon wird abgeraten:

root #export CLASSPATH="${CLASSPATH}:$(java-config --classpath log4j,xerces-2)"

Java Browser Plugins

Wichtig
The Java plugin support had been deprecated in JDK 9[1].

The Java browser plugin used to be managed via eselect java-nsplugin. This has now been removed in favor of a simpler out-of-the-box experience. For basic usage, simply emerge the chosen JVM with the nsplugin USE flag enabled. Note that Oracle's plugin is only available for amd64 and x86.

Notiz
Note that Chromium-based browsers since version 42 and Firefox since version 52 no longer support NPAPI-based plugins[2]. This effectively disables the Java plugin on modern browsers.

Für weitere Informationen, einschließlich JVM-Auswahl, Web-Start und Multilib, siehe das mit icedtea-web installierte README.

USE-Flags für Java

Setzen der USE-Flags

Für mehr Informationen über USE-Flags sei auf das USE-Flag Kapitel im Handbook:X86/Working/USE Gentoo-Handbuch verwiesen.

USE-Flags

  • Der java Flag fügt Unterstützung für Java in einer Vielzahl von Programmen hinzu;
  • Der nsplugin Flaf fügt Unterstützung für Mozilla-ähnliche Browser (einschließlich Firefox) hinzu. Dies ist für die Anzeige von Java-Applets in einem Mozilla-ähnlichen Browser erforderlich;
  • Der jce Flag fügt Unterstützung für die Java Cryptography Engine hinzu;

Following USE flags go in JAVA_PKG_IUSE.

  • The source flag installs a zip of the source code of a package. This is traditionally used for IDEs to 'attach' source to the libraries that are being use;
  • For Java packages, the doc flag will build API documentation using javadoc.

Siehe auch

Externe Ressourcen

Weitere Informationen können offline abgerufen werden:

  • man java-config
  • java-config --help

Wenn Sie Vorschläge oder Fragen zu diesem Dokument haben, senden Sie bitte eine E-Mail an das Gentoo Java Team: java@gentoo.org

Referenzen

  1. JDK 9 and the Java Plugin, java.com. Retrieved on November 30, 2018
  2. How do I enable Java in my web browser?, java.com. Retrieved on November 30, 2018

This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Joshua Nichols, Karl Trygve Kalleberg,
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.