ubuntuusers.de

Java

./java_logo.png Java ist eine plattformunabhängige Programmiersprache. Anwendungen, die in Java geschrieben wurden, können auf allen Plattformen genutzt werden, auf denen es Java gibt. Java wird in verschiedenen Varianten (von verschiedenen Unternehmen und Gruppen) und für viele Betriebssysteme angeboten.

Der größte Vorteil ist daher die Unabhängigkeit vom Betriebssystem, den nicht nur Entwickler schätzen. Anwendungen, die auf Java basieren, sind in dieser Liste zu finden. Laut Tiobe-Index 🇬🇧 gehört Java zu den am meisten verwendeten Programmiersprachen.

Installation

Die Installation von Java wird in einem eigenen Artikel behandelt: Java/Installation. Bevor man diesen Artikel aufruft, sollte man sich aber mit den im folgenden Abschnitt genannten Begriffen und Versionen vertraut machen.

Der einfachste Weg herauszufinden ob bereits eine Java-Version installiert ist, ist das Ausführen des folgenden Befehls im Terminal:

java -version 

Tipps

Weitere Hinweise zu Java wie z.B. zum Einstellen der zu verwendenden Java-Version und andere Problemlösungen sind ebenfalls in einem separaten Artikel Java/Tipps zu finden.

Geschichte

Java wurde von dem Unternehmen Sun Microsystems entwickelt und vertrieben. Es stand ursprünglich unter einer proprietären Lizenz: der Quellcode war zwar immer einsehbar, es durften jedoch keinerlei Änderungen daran vorgenommen werden. Außerdem gab es in den ersten Monaten 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 "GNU Classpath" als freie Implementierung der Standardklassenbibliotheken von Java geschaffen. 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.

2010 wurde die Firma Sun durch Oracle aufgekauft, während das Blackdown-Projekt schon 2007 beendet wurde.

Begriffe

JRE

Für die Ausführung von Java-Programmen ist ein JRE notwendig. Mit JRE bezeichnet man das Java Runtime Environment, die Laufzeitumgebung. Ein JRE gab bzw. gibt es von Oracle, Blackdown und dem GNU-Projekt. Für Entwickler, die selbst Java-Programme kompilieren wollen, ist diese Version nicht ausreichend – für Endanwender schon.

JDK/SDK

JDK ist die Abkürzung von Java Development Kit. Dieses Entwicklungswerkzeug für Java wird benötigt, um selbst Java-Programme schreiben und kompilieren zu können.

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

JVM

JVM ist die Abkürzung für Java Virtual Machine. Die JVM ist der Teil der JRE, der für die Ausführung des Bytecodes eines kompilierten Programms verantwortlich ist. JVMs für Linux werden von Oracle angeboten.

J2ME

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

Java Web Start

Java Web Start ist eine Technik, die es ermöglicht, Java-Anwendungen (keine Java-Applets!) mit dem Webbrowser über das Internet und nur einem Mausklick zu starten. Im Unterschied zu Java-Applets benötigen Java-Web-Start-Anwendungen keinen Browser, um ablaufen zu können. Erkennen kann man Java-Web-Start-Anwendungen an der Datei-Endung .jnlp.

Man kann sich auch einen lokalen Programmstarter für solche Anwendungen anlegen. Beispiel:

javaws http://www.domain.topleveldomain/PROGRAMM.jnlp 

Nutzt man aktuelle Versionen von Oracle Java, muss die Quell-Domain wie bei unsignierten Java-Applets zuerst freigeschaltet werden.

Versionen und Versionsnummern

Versionsnummern

Bei den Versionsnummern ist zu beachten, dass ab Java 1.5 nur noch die Zahl an der zweiten Stelle als Versionsnummer verwendet wird (1.5 = 5; 1.6 = 6 usw.). Im Wikipedia-Artikel Java-Technologie gibt es eine detaillierte Übersicht über die verschiedenen Versionen.

Java 14

Java 14 ist eine Short-Term-Support (STS) Version und wird bis September 2020 unterstützt.

Java 11

Java 11 ist (wie zuletzt Java 8) eine Long-Term-Support (LTS) Version. Oracle will seine Java 11 Version bis 2023 supporten. Im Jahr 2021 soll Java 17 erscheinen, welches die nächste LTS Version werden soll.

Java 10

Die geänderte Release-Politik führt zu einer raschen Abfolge neuer Versionen, welche sich wie Java 10 nicht wesentlich von der Vorgängerversion unterscheiden. Java 10 ist seit September 2018 EOL.

Java 9

Mit der Version Java 9 wurde das Modulsystem (Project Jigsaw) eingeführt. Dies bringt einige Änderungen beim Programmieren und die dafür notwendige Migration kann aufwendig sein. Java 9 ist seit März 2018 EOL.

Java 8

Java 8 ist eine Long-Term-Support (LTS) Version, welche von März 2014 bis Dezember 2020 verfügbar ist. Es gibt auch Informationen, dass der Support bis 2022 gehen soll.

Ab Version 8 ist auch JavaFX dabei. Wie zuerst mit AWT Abstract_Window_Toolkit und später mit Swing Java-Swing lassen sich mit JavaFX ansprechende und nun auch zeitgemäße Grafische_Benutzeroberfläche programmieren. Nun sind interaktive, multimediale Inhalt möglich und die Dialoge bieten Animationen.

Eine wesentliche Erweiterung von Java 8 ist die Lambda-Programmierung, welche funktionale Programmierung ermöglicht und welche die oben beschriebene GUI-Programmierung deutlich unterstützt.

Paketquellen

Es folgen einige historische Informationen die helfen die Versionen von Java und die Quellen besser zu verstehen. Wer sich nur für die aktuellen Quellen interessiert wird bei Oracle Java und OpenJDK fündig. Zur Installation der aktuellen Versionen geht es hier: Java/Installation

Auf der englischsprachigen Wikipedia Seite steht, dass mit Version Java 11 zum ersten Mal OpenJDK 11 den kompletten Quellcode unter der GNU General Public License umfasst und es in diesem keine Unterschiede im Code zur optionalen proprietären Lizenz (Oracle Java) gibt. Oracle verfolgt hier ein Dual-Lizenz Modell.

Oracle Java

Java 7 als Nachfolger von Sun Java 6 ist seit Ende 2011 verfügbar und die erste "eigene" Version von Oracle nach dem Aufkauf von Sun. Offiziell wird als Bezeichnung nur noch Java verwendet, der Name "Oracle Java" dient hier nur als Abgrenzung und zum besseren historischen Verständnis.

Sowohl Java 6 als auch Java 7 dürfen ab August 2011 nicht mehr über die offizielle Paketquellen von Ubuntu verteilt werden. Die bisherige "DLJ" (Operating System Distributor License for Java), die es Linux-Distributionen erlaubte, eigene Installationspakete von Java zu erstellen, wurde von Oracle einseitig aufgekündigt. Daher ist die manuelle Installation die einzige Möglichkeit, die Java-Version von Oracle zu installieren.

Da damit auch eine automatische Aktualisierung entfällt, sollte das OpenJDK die erste Wahl für Ubuntu-Benutzer sein.

OpenJDK

Sun Java 7 (nicht Oracle Java 7!) wurde unter dem Namen OpenJDK unter der GPL veröffentlicht. Dadurch wurde Java quelloffen und darf völlig frei verteilt werden. OpenJDK bietet trotz des irreführenden Namens sowohl eine Laufzeitumgebung (JRE) als auch ein Entwicklungswerkzeug (JDK) an und ist ebenfalls in mehreren Versionen verfügbar (siehe unten). Um die Begriffsverwirrung auf die Spitze zu treiben: der Paketname für das OpenJDK Browser-Plugin lautet icedtea-plugin statt "openjdk-plugin".

IcedTea wurde aus OpenJDK mit 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 Open-Source-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 ausschließlich mit freien Werkzeugen zu kompilieren. Die IcedTea-Pakete wurden bis auf das Browser-Plugin inzwischen durch OpenJDK-Pakete ersetzt.

Das icedtea-plugin wird nicht mehr unterstützt. Alle relevanten Browser haben die Unterstützung dafür bereits entfernt. Die entsprechenden Pakete sind ab Version 1.8 (Ubuntu 18.04) bereits als non-functional markiert, ab 19.04 sind die Pakete nicht mehr verfügbar.

Ab Ubuntu 16.04 steht OpenJDK 8, ab Ubuntu 18.04 zusätzlich OpenJDK 11 zur Verfügung. Beides sind LTS-Versionen mit verlängertem Support. Weitere Informationen und welche Version sich unter welcher Ubuntu-Version nutzen lässt, kann man dem Artikel Java/Installation/OpenJDK entnehmen.

GNU Java

Eine weitere Java-Implementierung ist der GNU Compiler for Java (gcj).

Sun Java (nur mehr historische Info)

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. Mit der Version Java 1.5 änderte sich 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 5 bzw. 1.5 gab es mind. 13 Aktualisierungen, die Verbesserungen mitbrachten und Sicherheitslücken korrigierten.

Mit dem Nachfolger Java 6 (1.6) geschriebene Desktop-Anwendungen sehen nicht mehr typisch nach Java aus, sondern passen sich dem jeweiligem GTK-Theme an. Die Version 6 gab es nur von Sun bzw. – nach einen Verkauf von Sun – von Oracle (siehe auch Java/Oracle Java und Downloadseite 🇩🇪). Noch in den offiziellen Paketquellen älterer Ubuntu-Versionen vorhandene Pakete sind seit Dezember 2011 praktisch nicht mehr benutzbar (das Browser-Plugin hatte Sicherheitslücken und ist durch ein "Update" stillgelegt worden).

Intern

Extern

Diese Revision wurde am 26. März 2020 17:58 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Übersicht, Java, Internet, Programmierung