Java
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.
Ein JDK beinhaltet stets auch eine JRE, es ist also nicht notwendig neben einem JDK eine JRE zu installieren.
Installing IcedTea GCJ Virtual Machine
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.
/etc/portage/package.use
Required USE flag changesdev-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.
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]
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.
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
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
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.
'"`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
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.
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
- 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
- Fragen oder Anregungen bezüglich dieser Seite können per java@gentoo.org an das Gentoo-Java-Team gerichtet werden.
- 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
- ↑ JDK 9 and the Java Plugin, java.com. Retrieved on November 30, 2018
- ↑ 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.