Java

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

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎português do Brasil • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어
Resources

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

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 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.

JVM languages

The Java virtual machine is not used exclusively by Java programming language. Multiple programming languages use the Java platform and run on the JVM. Examples of such include: Clojure, Apache Groovy, Kotlin or Scala.

Eine virtuelle Maschine installieren

Die Auswahl

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

Anbieter JDK JRE
IcedTea Open Java SE (früher icedtea6-bin) dev-java/icedtea-bin
Oracle Java 7 SE dev-java/oracle-jdk-bin dev-java/oracle-jre-bin
Sun Java 6 SE (maskiert, inaktiv nach der Übernahme von Sun durch Oracle) dev-java/sun-jdk dev-java/sun-jre-bin
IBM Java SE dev-java/ibm-jdk-bin dev-java/ibm-jre-bin

Eine JRE/JDK installieren

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

root #emerge --ask virtual/jdk

To install the profile's default JRE run:

root #emerge --ask virtual/jre

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 /etc/portage/make.conf zu akzeptieren, können die entsprechenden Packete nicht installiert werden. Informationen wie eine Lizenz in make.conf akzeptiert werden kann, befinden sich im Portage Handbuch

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

Notiz
Ein JDK beinhaltet stets auch eine JRE, es ist also nicht notwendig neben einem JDK eine JRE zu installieren.

Installing IcedTea GCJ Virtual Machine

Wichtig
gcj is deprecated and is removed in GCC versions 7.0 and greater. It is unavailable from GCC 6.0 on Gentoo. Consider this section deprecated.

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.

When GCC is rebuilt with this USE flag set, the dev-java/icedtea package can be installed. Because of a Portage bug, users need to install dev-java/gcj-jdk and dev-java/ant-core explicitly first if they are not already present.

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 benötigen einige extra Schritte vor der Installation. emerge 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 /usr/portage/distfiles abgelegt werden. Danach kann die Installation wie üblich via emerge durchgeführt werden.

Setting up a headless JRE

Sometimes there is no need for a full JRE with all the capabilities of java. Using java on a server often does not require any GUI, graphical, sound or even printer related features. To install a simplified (sometimes also referred to as headless) JRE, a few USE flags need to be changed for the selected JRE flavor.

DATEI /etc/portage/package.useRequired USE flag changes
dev-java/icedtea headless-awt -alsa -cups
dev-java/icedtea-bin headless-awt -alsa -cups
dev-java/oracle-jre-bin headless-awt -alsa -cups

Depending on the current Gentoo profile, this might already be the case. As usual, the USE flag settings that are applicable to a particular package can be checked by running emerge in pretend mode:

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

Die virtuelle Maschine konfigurieren

Übersicht

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

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

Notiz
Die System- oder Benutzer-Einstellungen können auch via eselect gesetzt werden. Siehe eselect java-vm help.

Setzen der Standard virtuellen Maschine

Mit dem Kommando java-config --list-available-vms erhält man eine Liste aller auf dem System installierten JDKs und JREs. Eine Beispielausgabe ist:

root #java-config --list-available-vms
The following VMs are available for generation-2:
1)      IcedTea-bin 1.10.4 [icedtea-bin]
2)      Sun JDK 1.5.0.20 [sun-jdk-1.5] (Build Only)
*)      Sun JDK 1.6.0.16 [sun-jdk-1.6]
Notiz
Virtuelle Machinen die als "Build Only" markiert sind können Sicherheitslücken enthalten oder nicht mehr aktiv betreut sein. Es ist empfehlenswert diese weder als System- noch als Benutzer-VM zu setzen.

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 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 sun-jdk-1.6
Now using sun-jdk-1.6 as your generation-2 system JVM

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

root #java-config --set-system-vm 3
Now using sun-jdk-1.6 as your generation-2 system JVM

Als normaler Benutzer, kann java-config --set-user-vm verwendet werden.

Notiz
Es ist nicht länger nötig source zu verwenden um die Äderungen der System-/Nutzer-VM wirksam zu machen.

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 benutzt. Trotzdem sind sie noch verfügbar, da sie von einigen Packete beim komplieren benötigt werden. Vom Setzen solcher VMs als aktive System- oder Nutzer-VM wird dringend abgeraten. Andernfalls werden diese VMs bei der Ausführung von /usr/bin/{java,javac,..} oder von Packeten 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 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 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.

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 angepasst werden.

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

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

CodeSourcen des benutzerspezifischen Klassenpfads

'"`UNIQ--pre-00000005-QINU`"'

This is a deprecated template and will be removed soon!!! Help us update this template!

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

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.

For more information, including JVM selection, Web Start, and multilib, see the README installed with icedtea-web.

USE-Flags für Java

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.

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.

See also

External resources

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

For suggestions or questions regarding this document, please email the Gentoo Java team: java@gentoo.org

References

  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, Joshua Saddler (nightmorph)
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.