ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

Java

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

./java_logo.png

Java ist eine plattformunabhängige Programmiersprache. Das bedeutet dass Anwendungen, die in Java geschrieben wurden, auf allen Plattformen genutzt werden können, auf denen es Java gibt. Implementierungen von Java werden von verschiedenen Unternehmen angeboten.

Java wurde von dem Unternehmen Sun Microsystems entwickelt und vertrieben und stand von Beginn an unter einer proprietären Lizenz. Der Quellcode war zwar immer einsehbar, es durften jedoch keinerlei Änderungen daran vorgenommen werden. Außerdem gab es zunächst keine Java-Version, die unter Linux lauffähig war.

Das Unternehmen Blackdown entwickelte daher eine Version von Java, die von Linux-Anwendern auf verschiedenen Plattformen genutzt werden konnte. Später benutzte Sun unter anderem die Blackdown-Änderungen, um seinerseits eine Linux-Variante von Java zu erstellen. Diese ist allerdings bis heute nur auf der PC-Plattform lauffähig.

Neben diesen beiden Varianten wurde vom GNU-Projekt eine freie Implementierung der Standardklassenbibliotheken von Java geschaffen (GNU Classpath). Außerdem wurde der GNU Compiler für Java entwickelt. Diese Entwicklungen werden seither von vielen Open-Source Anwendern gegenüber den SUN-Varianten bevorzugt, da sie unter der GPL stehen. Im November 2006 gab Sun jedoch bekannt, sein "Original-Java" zukünftig ebenfalls unter der GPL zu veröffentlichen.

Begriffe

Die Begrifflichkeiten sind aufgrund der komplizierten Geschichte, aber auch wegen der verschiedenen "Ausprägungen" von Java recht kompliziert. Daher sollen hier zunächst die wichtigsten Begriffe kurz erklärt werden.

JRE

Mit JRE bezeichnet man das Java Runtime Environment (Laufzeitumgebung). Dieses sorgt dafür, dass in Java geschriebene Programme auf einer Plattform ausgeführt werden können. Ein JRE gibt es von Sun, Blackdown und GNU. Für Entwickler, die selbst Java-Programme schreiben und kompilieren wollen, ist diese Version nicht ausreichend.

JDK/SDK

Das JDK ist das Java Development Kit. Dieses Entwicklungswerkzeug für Java wird von allen Anwendern benötigt, die selbst Java-Programme schreiben und kompilieren möchten. Das JDK enthält auch die Programme der JRE vollständig. Diese braucht also nicht noch zusätzlich installiert zu werden.

Manchmal wird das JDK auch als SDK (Software Development Kit oder Standard Development Kit) bezeichnet; ein Begriff, der auch für die Entwicklungswerkzeuge anderer Sprachen benutzt wird. Ein JDK bzw. SDK für Java gibt es ebenfalls von Sun, Blackdown und als freie Version.

⚓︎

JVM

JVM ist eine Abkürzung für die Java Virtual Machine. Die JVM ist der Teil der JRE, der für die Ausführung des Programmcodes eines Java-Programms verantwortlich ist. Beim Aufruf eines Java-Programms wird also in Wirklichkeit die JVM aufgerufen, die den Code interpretiert und das Programm ablaufen lässt. JVMs für Linux werden von Sun und Blackdown angeboten.

J2ME

J2ME (Java 2 Platform, Micro Edition (J2ME) Wireless Toolkit) wird speziell für die Entwicklung von Software für Mobiltelefone verwendet. Es muss manuell unter J2ME 🇬🇧 heruntergeladen und installiert werden.

Java Versionen und Versionsnummern

Bis zur Version 1.4 wurden neue Versionen von Java sowohl von Sun als auch von Blackdown kontinuierlich hochgezählt. Dabei übernahm Blackdown immer die aktuelle Version von Sun und fügte eigene Änderungen hinzu. Auch die heute aktuell verfügbare Version von Blackdown trägt noch die Versionsnummer 1.4. Mit der Version nach Java 1.4 änderte sich auch die Bezeichnung der Versionsnummer. Von manchen wird die neue Version als 1.5 bezeichnet, von Sun selbst wurde die Versionsnummer 5 eingeführt. Daher kann es hier zu Verwirrungen kommen. Von der Version 1.5 bzw. 5 gab es bisher 13 Aktualisierungen, die Verbesserungen mitbrachten und Sicherheitsrisiken korrigierten. Heute wird diese Java-Version allgemein mit Version 5 bezeichnet. In Java 6 geschriebene Desktop-Anwendungen sehen nicht mehr typisch nach Java aus, sondern passen sich dem jeweiligem GTK-Theme an. Die Version 6 von Java gibt es aktuell nur von Sun. Sun Java 7 wurde unter dem Namen OpenJDK unter der GPL veröffentlicht. Dadurch ist Java komplett OpenSource und darf völlig frei verteilt werden. IcedTea wurde aus OpenJDK mit komplett freien Compilern hergestellt. IcedTea besteht zum größten Teil aus dem originalen Code. Einige Teile sind allerdings durch Code aus dem GNU Classpath-Projekt ersetzt, da sie nicht unter einer OpenSource-Lizenz verfügbar sind. IcedTea, welches vornehmlich von RedHat entwickelt wurde war von Anfang an nur als eine Zwischenlösung geplant bis es möglich war OpenJDK mit komplett freien Tools zu kompilieren. Ab Hardy ist dies nun möglich und die IcedTea-Pakete wurden bis auf das Browserplugin komplett durch OpenJDK-Pakete ersetzt. Man darf sich dabei auch nicht von den Versionsnummern täuschen lassen. Auch wenn OpenJDK die Version 6 besitzt und IcedTea die Version 7, sind die OpenJDK-Pakete trotzdem die aktuelleren. ⚓︎

Installation

Einige Programme und auch einige Internetseiten setzen Java voraus, daher wird es wahrscheinlich früher oder später nötig, ein Java-Paket zu installieren.

Ab Hardy Heron 8.04

OpenJDK

Unter Hardy Heron 8.04 kann man diese neuste und freie Java Version direkt aus den Paketquellen installieren.

  • openjdk-6-jre (universe, [2]) - die Java-Laufzeitumgebung für normale Anwender

  • openjdk-6-jdk (universe, [2]) - Java Development Kit für Entwickler

  • openjdk-6-source (universe, [2]) - Quellpakete von Java (wird z.B. benötigt um JavaDoc der Standardbibliothek in Eclipse anzuzeigen (wie eine .JAR hinzufügen))

  • openjdk-6-demo (universe, [2]) - Beispieldateien für Java (normalerweise nicht benötigt)

  • openjdk-6-doc (universe, [2]) - Dokumentation für Java (normalerweise nicht benötigt)

  • openjdk-6-jre-headless (universe, [2]) - kleinere Java-Laufzeitumgebung, welche nur in sehr speziellen Ausnahmefällen nötig ist

  • openjdk-6-jre-lib (universe, [2]) - Plattformunabhängige Java-Bibliotheken

(Mozilla) Browser Plugin

Stand 02.01.2009: Das Paket icedtea-gcjwebplugin löst seine Abhängigkeiten nicht richtig auf. Stattdessen reicht es anscheinend aus das folgende Paket zu installieren:

  • icedtea6-plugin (Entwicklung, [2]) - Java-Plugin für Webbrowser

Sun Java

  • ubuntu-restricted-extras (multiverse, [2]) - Metapaket, installiert Sun Java 6 und weitere Programme

  • sun-java6-jre (multiverse) - das JRE für normale Anwender

  • sun-java6-plugin (multiverse) - Java-Plugin für Webbrowser

  • sun-java6-jdk (multiverse) - das JDK für Entwickler

  • sun-java6-source (multiverse) - Quellpakete von Java (wird z.B. benötigt um JavaDoc der Standardbibliothek in Eclipse anzuzeigen (wie eine .JAR hinzufügen))

  • sun-java6-demo (multiverse) - Beispieldateien für Java (normalerweise nicht benötigt)

  • sun-java6-doc (multiverse) - Dokumentation für Java (normalerweise nicht benötigt)

  • sun-java6-fonts (multiverse) - Die Schriftart Lucida (normalerweise nicht benötigt)

GNU Java

Die Java-Implementierung des GNU-Projekts ist ebenfalls in den Paketquellen enthalten. Sie wird standardmäßig installiert. Für Dapper Drake steht die Version 1.0.56 zur Verfügung. Folgende Pakete können installiert werden:

  • java-gcj-compat - das GNU JRE für normale Anwender

  • gcjwebplugin (universe, [2]) - Plugin für Mozilla Browser

  • free-java-sdk (universe) - freies SDK für Entwickler (Version 1.0)

Sun Java 7

Achtung!

Viele Programme kommen noch nicht mit Java 7 zurecht. Es empfiehlt sich daher nach wie vor Java 6 zu nutzen.

Unter Gutsy Gibbon 7.10 kann man diese neuste Java Version direkt aus den Paketquellen installieren.

  • icedtea-java7-jre (universe, [2]) - das JRE für normale Anwender

  • icedtea-java7-plugin (universe, [2]) - Java-Plugin für Webbrowser

  • icedtea-java7-jdk (universe, [2]) - das JDK für Entwickler

  • icedtea-java7-source (universe, [2]) - Quellpakete von Java (wird z.B. benötigt um JavaDoc der Standardbibliothek in Eclipse anzuzeigen (wie eine .JAR hinzufügen))

  • icedtea-java7-demo (universe, [2]) - Beispieldateien für Java (normalerweise nicht benötigt)

  • icedtea-java7-doc (universe, [2]) - Dokumentation für Java (normalerweise nicht benötigt)

Blackdown Java

Für Dapper Drake steht die Version 1.4.2 zur Verfügung. Folgende Pakete können installiert werden:

  • j2re1.4 (multiverse, [2]) - das JRE für normale Anwender

  • j2re1.4-mozilla-plugin (multiverse) - Java-Plugin für Webbrowser von Mozilla

  • j2sdk1.4 (multiverse) - das SDK für Entwickler

GNU Java

Die Java-Implementierung des GNU-Projekts ist ebenfalls in den Paketquellen enthalten. Sie wird standardmäßig installiert. Für Dapper Drake steht die Version 1.0.56 zur Verfügung. Folgende Pakete können installiert werden:

  • java-gcj-compat - das GNU JRE für normale Anwender

  • gcjwebplugin (universe, [2]) - Plugin für Mozilla Browser

  • free-java-sdk (universe) - freies SDK für Entwickler (Version 1.0)

IcedTea

  • icedtea-gcjwebplugin (universe, [2]) - Java-Plugin für Webbrowser

Problembehebung

Lizenzbedingungen akzeptieren

Für die Installation muss den Lizenzbedingungen von Sun für Java zugestimmt werden! Damit dies möglich ist, muss unter Umständen erst im Terminal [3]

sudo dpkg-reconfigure debconf 

ausführt werden und dort "Dialog" eingestellt werden. Andernfalls wird die Installation mit einer Fehlermeldung abgebrochen, die bei einer Installation über den Adept-Manager fälschlicherweise eine beschädigte Datei als Grund angibt.

Bei einer Installation im Terminal [3] erscheint die korrekte Fehlermeldung:

sun-dlj-v1-1 license could not be presented

Nach der Installation muss man noch die verwendete Java-Version neu einstellen.

Hat man die Installation schon über den Adept-Paketmanager begonnen und sieht im Fortschritt-Fenster bei einem Klick auf "Show Details" eine OK-Schaltfläche, die man nicht bestätigen kann, hilft nur ein Abbruch der Installation und die Eingabe auf der Konsole [3]

dpkg --configure -a 

Anschließend bleibt man gleich auf der Konsole und installiert die Java-Pakete auf diese Art [1]. Nun erscheint wiederum die OK-Schaltfläche der Lizenzvereinbarung, die man jetzt problemlos über die Entertaste bestätigen kann. Weitere Java-Installationen (z.B. eine neuere Version) kann man wieder über den Paketmanager durchführen, weil die Lizenzvereinbarung als angenommen gilt und nicht mehr bestätigt werden muss.

Java wird nicht gefunden

In manchen Fällen kann es vorkommen, dass Java-Programme nach der Installation nicht mehr ausgeführt werden können. Man erhält dann im Terminal nur die Nachricht

bash: java: command not found

Dies liegt an einer fehlerhaften Verknüpfung. Um dies zu beheben, öffnet man ein Terminal [3] und legt die Verknüpfung in /usr/bin korrekt an:

cd /usr/bin
sudo rm java
sudo ln -s /etc/alternatives/java java 

Danach sollte Java wieder starten.

⚓︎

JAVA_HOME einstellen

Beschreibung, wie die Umgebungsvariablen für alle Nutzer gesetzt werden. Für Umgebungen wie z.B. Tomcat Jetty Geronimo (JSP, Servlets, JSF). J2SE JDK muss installiert sein.

Zuerst muss man nachsehen, wo java bin-Ordner für javac, javadoc und co ist:

ls -la /etc/alternatives/javac 

zum Beispiel

/etc/alternatives/javac -> /usr/lib/jvm/java-1.5.0-sun/bin/javac

Dann environment-Einstellung für alle User einstellen. Dafür die Datei /etc/environment in einem Editor mit Root-Rechten öffnen [4] und dies eintragen:

#Pfad zum Java SDK-Basis-Ordner - kein Slash am Ende!
JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

Anschließend abmelden und neu anmelden.

Java & Desktop-Effekte

Es kann vorkommen, dass grafische Java-Applikationen nicht korrekt dargestellt werden, wenn die Desktop Effekte aktiviert sind. Die Applikation wird dabei zwar gestartet, jedoch wird außer einem leeren, grauen Fenster nichts angezeigt. Ruft man die selbe Java-Anwendung auf, wenn die Desktop Effekte deaktiviert sind, so wird auch der Inhalt (Buttons, Eingabefelder, ...) einwandfrei angezeigt. Dieses Problem lässt sich für alle Java Versionen leicht lösen:

Java 6

Für die neueste Version von Java gibt es einen einfachen Lösungsweg. Dazu öffnet man die Datei /etc/environment mithilfe eines Editors welcher Root-Rechte hat[4] und fügt am Ende der Datei die folgende Zeile hinzu:

AWT_TOOLKIT="MToolkit"

Um die Einstellung zu sofort übernehmen, kann entweder die Umgebungsvariable durch Eingabe von

export AWT_TOOLKIT="MToolkit"

sofort gesetzt werden, oder der X-Server mittels Strg + Alt + neugestartet werden.

Hinweis:

Dadurch werden alle laufenden Programme beendet.

Andere Versionen

Das Beryl-Wiki 🇬🇧 bietet mehr Information und Lösungswege zu diesem Thema. Sollten alle oben stehenden Lösungen, als auch die Beryl-Wiki nicht weiterhelfen, so gibt es auch andere Wikis und Foren, wo dieses Thema behandelt wird. Die Google-Suche wohl ist der beste Weg dort hin.

⚓︎

Java-Plugin für Browser aktivieren

Hinweis:

Dieses Verfahren ist nur dann notwendig, wenn man Java nicht als fertiges Ubuntu-Paket (mit Browser-Plugin) installiert.

Damit die gewünschte Java-Version benutzt werden kann, muss ein Link zu einem entsprechenden Plugin für den verwendeten Browser gesetzt werden. Möglicherweise ist noch das Plugin einer älteren/anderen Java-Version vorhanden. Daher sollte man zunächst das Plugin-Verzeichnis des Browsers überprüfen und veraltete Links löschen.

Ein Java Browser-Plugin hat immer die Endung .so (Shared Object), was bedeutet, dass dies eine Programmbibliothek ist, die sich mehrere Programme teilen können. In der Regel heißt das Java-Plugin libjavaplugin_oji.so. Je nach verwendeter Java-Version (Sun, Blackdown ...) befindet sich das Plugin an anderer Stelle im Dateisystem. Am leichtesten lässt sich der Speicherort mit dem folgenden Befehl im Terminal [3] herausfinden:

update-alternatives --list java 

Die Ausgabe sieht dann beispielsweise so aus:

/usr/bin/gij-wrapper-4.1
/usr/lib/jvm/java-6-sun/jre/bin/java
/usr/lib/j2se/1.4/bin/java

Der erste Eintrag zeigt den Pfad zum standardmäßig installierten GNU-Java. Die beiden weiteren Pfade zeigen jeweils auf die JVM. Pfad Nummer 2 zeigt auf die JVM von Sun Java 6 und der dritte Pfad steht für die JVM von Blackdown Java. Für den Browser wird aber nicht die JVM, sondern ein Plugin benötigt. Am einfachsten ist es, den Dateimanager zu öffnen und hier dem angegebenen Pfad zu folgen, bis man auf das Verzeichnis plugin stößt. Hier befindet sich in der Regel die o.g. Datei. Vollständige Pfade zum Plugin kann man den unten angegebenen Befehlen entnehmen.

Möchte man nun eines der Plugins mit dem Browser Firefox verlinken, so muss man zunächst den korrekten Pfad heraussuchen und anschließend mit dem Befehl ln im Terminal [3] den Link zum Plugin-Verzeichnis des Browsers setzen.

Für Sun Java 6 sieht der Link unter Edgy Eft 6.10 so aus:

sudo ln -sf /usr/lib/jvm/java-6-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/firefox/plugins/ 

Für Blackdown Java sieht der Link folgendermaßen aus:

sudo ln -sf /usr/lib/j2se/1.4/jre/plugin/i386/mozilla/libjavaplugin_oji.so /usr/lib/firefox/plugins/ 

Für OpenJDK Java sieht der Link folgendermaßen aus:

sudo ln -sf /usr/lib/jvm/java-6-openjdk/jre/lib/i386/gcjwebplugin.so /usr/lib/firefox/plugins/ 

Dies sind natürlich nur Beispiele. Bei anderen Versionen von Java und/oder Ubuntu muss der Befehl angepasst werden.

⚓︎

Ubuntu 64 Bit

Wiki/Icons/ubuntu64.png Für die Integration von Java in Browsern zur Anzeige von Java-Applets oder Start von Java Web Start Applikationen muss bis dato noch die 32 Bit Version von Java verwendet werden. Dies kann jedoch parallel zur 64 Bit Version erfolgen, d.h. für Java-Anwendungen die nicht im Browser laufen, kann die 64 Bit Version genutzt werden.

Eine Möglichkeit ist, auf der Sun Java Downloadseite die aktuelle "Linux (selbst extrahierende Datei)" (nicht RPM) herunterzuladen und auszuführen. Wird man nach dem Zielpfad gefragt, wählt man ein separates (beliebiges) Verzeichnis - so können auch bereits bestehende Java-Versionen nebeneinander installiert werden.

Die Konfiguration im Browser ist hier am Beispiel von Opera gezeigt: im Menü "Tools → Preferences → Advanced → Content" gibt man mit "Java options..." den Pfad der zuvor installierten Java-Version an (z.B. /home/apps/jre1.5.0_06/lib/i386) und setzt danach das Häkchen bei "Enable Java". Nach einem Neustart des Browsers sollten dann Java-Applets funktionieren.

⚓︎

Programme beschleunigen

Als Beispielaufruf sei der Befehl

java -jar myFancyGuiApp.jar 

gegeben. Auf Windows-Systemen wird automatisch die DirectX-Beschleunigung verwendet, aber auf Unix-Systemen leider nicht automatisch die OpenGL-Beschleunigung. Um diese einzuschalten verwendet man den Parameter -Dsun.java2d.opengl=true (siehe System Properties for All Platforms 🇬🇧 / Support for Hardware-Accelerated Rendering Using OpenGL 🇬🇧 ):

java -Dsun.java2d.opengl=true -jar myFancyGuiApp.jar 

Je nach Rechnerarchitektur (z.B. 64bit-System) wird als Standard (siehe Server-Class Machine Detection 🇬🇧 ) die Server-VM verwendet. Um die für Client-Anwendungen optimierte VM zu verwenden, muss man auf solchen Systemen explizit den Parameter -client angeben:

java -client -jar myFancyGuiApp.jar 

Es hängt dabei von der verwendeten VM ab, ob eine Client-VM für 64bit verfügbar ist. Suns 5.0 64bit VM scheint noch keine Client-VM zu unterstützen, der Parameter schadet aber nicht. Insofern sollte jede grafische Anwendung mit dem Parameter -client gestartet werden.

Schließlich kann man je nach Anwendung (z.B. Java-Spiele oder andere umfangreichere Applikationen) auch noch Geschwindigkeit herausholen, indem man der Anwendung mehr als die maximalen 64 MB zur Verfügung stellt. Hierzu dient der Parameter -Xmx:

java -Xmx256m -jar myFancyGuiApp.jar 

Natürlich kann man auch alle miteinander kombinieren:

java -client -Xmx256m -Dsun.java2d.opengl=true -jar myFancyGuiApp.jar 

Diese und weitere Parameter sind auch noch einmal in den Java options 🇬🇧 erläutert. Es gibt noch zahlreiche weitere Parameter, um die Java VM zu tunen, aber die hier vorgestellten sind die einfachsten, welche auch meist die größte Wirkung bringen. Natürlich ist eine spürbare Beschleunigung damit nicht zwingend garantiert, aber man sollte es mal ausprobieren und staunen, warum das nicht als Standard so schnell geht.

⚓︎

Verwendete Java-Version einstellen

Es ist möglich mehrere verschiedene REs und SDKs zu installieren. Welche Version systemweit benutzt wird (z.B. durch Eingabe von "java" in der Shell), kann man mit Hilfe des Alternativen-Systems einstellen. Diese Einstellung kann man mit java für die Java-Virtual-Machine (in JRE enthalten) und mit javac für den Java-Compiler (in JDK/SDK enthalten) vornehmen:

sudo update-alternatives --config java 

Problemlöser Startscript

Bei einigen Java-Programmen findet die Java-Umgebung nicht den richtigen Pfad zum Programmverzeichnis. Es kommt dann zu sehr kuriosen Fehlern. Abhilfe schafft hier ein kleines Startscript. Vorraussetzung: Der Ordner mit dem Java-Programm sollte sich direkt im Homeverzeichnis befinden. Der Startscript sorgt dafür, dass das Programm immer direkt aus dem Programmordner gestartet wird. Der Startscript lässt sich komfortabel einer Desktopverknüpfung oder einem Starter im GNOME Panel zuweisen.

#!/bin/bash
#start.sh - Der Java-Programm-Starter
#In den Programmordner wechseln
cd ~/javaprgrammordner/
#Java-Programm starten
java -jar programmname.jar
exit 0

Dieses Script als start.sh direkt in den Java-Programmordner speichern und in der Konsole mit folgendem Befehl ausführbar machen:

chmod u+x start.sh 

Diese Revision wurde am 30. März 2009 20:13 von Philipp_B erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Programmierung, Internet, Java, Übersicht