Java
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
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.
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
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.
/etc/portage/package.use
Erforderliche USE-Flag-Änderungendev-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.
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]
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
.
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
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
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.
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
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.
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 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
- Die gentoo-java, gentoo-user, und gentoo-dev Mailinglisten-Archive
- #gentoo (webchat) und #gentoo-java (webchat) über IRC
- Java 7 and bootstrapping icedtea im Gentoo Forum
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
- ↑ 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.