Ulrichs Werkbank

Tipp: Java-Programme ausführen

31. Dezember 2016
von Ulrich Hilger

 

 

Sei es Windows, Mac OS oder Linux, Betriebssystemen ist gemeinsam, dass zur Nutzung von Funktionen des Rechners auf ihrer Grundlage Programme zur Ausführung kommen.

Programme werden zu diesem Zweck in ausführbaren Dateien hinterlegt und nach Wunsch gestartet. Das gilt auch für Programme, die in der Programmiersprache Java [7] geschrieben sind. Allerdings weisen diese einen Unterschied auf: Die Java-Plattform basiert auf der Spezifikation einer virtuellen Maschine (Java Virtual Machine, JVM) [14].

Java-Programme laufen stets in einer Instanz der JVM, die als Teil der Java Laufzeitumgebung (Java Runtime Environment, JRE) bereitgestellt wird. Dieser Tipp beschreibt, wie in Java geschriebene Programme ausgeführt werden.

Programme und Java-Programme

Wie andere Programme werden auch Java-Programme ausgeführt, indem von der Kommandozeile [11] aus der Befehl zum Start einer ausführbaren Datei gegeben wird. Der Unterschied bei Java ist, dass stets die JVM ausgeführt wird. Das Java-Programm wird der JVM quasi 'mitgegeben'. Umgangssprachlich formuliert ergeben sich die folgenden zwei Varianten eines Kommandos zur Ausführung eines Programmes.

Start eines Programmes

"Liebes Betriebssystem, führe die am Ort [Programme] befindliche ausführbare Datei namens [Programmname] aus."

Start eines Java-Programmes

"Liebes Betriebssystem, führe die am Ort [JRE-Ort] befindliche JVM namens java aus und veranlasse sie, die am Ort [Programme] befindliche ausführbare Datei namens [Programmname] auszuführen."

Wie man an den Varianten ersehen kann ist der Ablageort ausführbarer Dateien von Bedeutung. Weil bei Java-Programmen zwei ausführbare Dateien eine Rolle spielen, sind auch zwei Ablageorte zu berücksichtigen: Der Ablageort des JRE und der des Java-Programmes.

Wir kommen später auf diesen Umstand zurück und wenden uns zunächst der Frage zu: Wo läßt sich eine Laufzeitumgebung für Java herbekommen?

Das JRE beschaffen

Aus dem vorigen Abschnitt wird deutlich: Zur Ausführung eines Java-Programmes wird eine JVM benötigt. Diese ist als Teil des JRE für Windows, Mac OS und Linux sowie auch andere Betriebssysteme verfügbar. Das JRE ist ebenso wie dessen Entwicklungswerkzeuge (Java Development Kit, JDK) Open Source und zum Beispiel von Azul [2] oder direkt von den Webseiten des OpenJDK [6] als einzelne komprimierte Datei [9] frei erhältlich.

Nach dem Herunterladen genügt es, das geladene Archiv zu entpacken [9]. Das so entstehende Verzeichnis im Dateisystem des lokalen Rechners ist dann schon die von Java-Programmen benötigte Laufzeitumgebung.

Beispiel

Nehmen wir an, das JDK wurde in das Benutzerverzeichnis [10] des Anwenders fred heruntergeladen, dort entpackt und das entpackte Resultat in das Unterverzeichnis work/jdk verschoben. Das JDK wäre dann im folgenden Verzeichnis zu finden:

/home/fred/work/jdk

Dort hat man nun schon alles, was zur Herstellung oder Ausführung von Java-Programmen nötig ist.

Ein Java-Programm starten

Wie eingangs erwähnt, wird zur Ausführung eines Java-Programmes neben Ablageort und Name des Programmes auch Ablageort und Name des JRE angegeben. Mit dem vorangegangenen Beispiel findet sich das JRE unter

/home/fred/work/jdk/jre/bin

Zur Ausführung eines Beispiels fehlt nun noch ein Java-Programm. Ein solch einfaches "Hallo Welt" ist unter [4] als Java-Klasse Hallo.class vorhanden. Deren Quellcode kann unter [5] betrachtet werden. Wird die Datei Hallo.class z.B. abgelegt unter

/home/fred/work/klassen

lautet der vollständige Befehl zur Ausführung

/home/fred/work/jdk/jre/bin/java -cp /home/fred/work/klassen Hallo

Der Befehl java [1] erwartet im Parameter -cp die Angabe des sogenannten Classpath. Von da lädt das JRE bei der Ausführung von Java-Programmen deren Bestandteile, die in Form von Klassen [8] vorliegen dynamisch nach Bedarf.

Das Ergebnis der Ausführung kann selbst in Augenschein genommen werden. Folgt man den hier beschriebenen Schritten am eigenen Rechner erscheint bei der Ausführung auf der Kommandozeile als Antwort

Hallo Welt!

Zu dieser Ausgabe kommt es, weil das weiter oben angegebene Kommando das JRE veranlaßt, eine Instanz der JVM zu starten, die Klasse Hallo zu laden und den Code auszuführen, der in deren Methode main enthalten ist wonach der Lauf der JVM wieder beendet wird. 

Ausblick

Der Tipp zeigt: Mit wenigen Handgriffen ist das JDK beschafft und bereit zur Ausführung von Java-Programmen. Freilich gibt es allerlei Handgriffe zur Vereinfachung.

Beispielsweise beinhaltet Linux Mittel zum Starten von Programmen aus einer grafischen Bedienoberfläche heraus, ganz wie andere Systeme auch [3]. Zudem gibt es allerlei Möglichkeiten, wie Ablageorte für Programme im System konfiguriert werden, damit Programmbefehle ohne die Angabe langer Pfade und mithin verkürzt verwendet werden können [12], [13].

Alledem liegt im Kern die hier beschriebene Mechanik zugrunde und deren Kenntnis ist Voraussetzung für den Einsatz jener Hilfsmittel und Einstellungen.

Fazit

Java-Programme sind mit Eigenschaften wie Virtualisierung, Objektorientierung, strenger Typisierung, dynamischem Laden und dynamischer Speicherverwaltung plattformunabhängig, skalierbar, maximal portabel, ressourcenschonend und performant.

Zur Ausführung von Java-Programmen genügt ein Befehl auf der Kommandozeile. Ein solches Kommando kann zur eigenen Bequemlichkeit in ein Skript oder einen zum verwendeten System passenden Programmstarter [3] eingebaut werden. Varianten zur Ausführung von Java-Programmen sind so vielfältig, dass sie den Rahmen dieses Tipps sprengen würden. Allen Varianten liegt allerdings dasselbe Prinzip zugrunde: Der hier beschriebene Weg, ein Java-Programm auszuführen.

Mit nicht mehr als einem simplen Kommando auf der Kommandozeile lassen sich Programme nutzen, die auf so ziemlich jedem Betriebssystem laufen und dabei nichts erfordern außer einer Java-Laufzeitumgebung.

Die Java Laufzeitumgebung sowie ihre Entwicklungswerkzeuge erfordern keine anderen Abhängigkeiten, sie sind für alle gängigen Betriebssysteme frei erhältlich. Mit ihnen lassen sich Programme einfach und unabhängig vom Betriebssystem herstellen und ausführen.

 

 

Verweise

[1] Dokumentation der Verwendung des Java-Befehls
http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

[2] Das JDK herunterladen
http://www.azul.com/downloads/zulu/

[3] Beitrag zum Starten von Programmen auf Ubuntuusers
https://wiki.ubuntuusers.de/Programme_starten/ 

[4] Hallo.class
http://uhilger.de/dl/demo/java/hallo/Hallo.class

[5] Hallo.java
http://uhilger.de/gitblit/blob/demo.git/master/src!Hallo.java

[6] Webseiten des OpenJDK
http://openjdk.java.net/

[7] Beitrag zur Programmiersprache Java auf Wikipedia
https://de.wikipedia.org/wiki/Java_(Programmiersprache)

[8] Beitrag zu Klassen auf Wikipedia
https://de.wikipedia.org/wiki/Klasse_(Objektorientierung)

[9] Beitrag zu Archiven auf Ubuntuusers
https://wiki.ubuntuusers.de/Archivmanager/

[10] Beitrag zum Benutzerverzeichnis auf Ubuntuusers
https://wiki.ubuntuusers.de/Homeverzeichnis/

[11] Beitrag auf Wikipedia zur Kommandozeile
https://de.wikipedia.org/wiki/Kommandozeile

[12] Beitrag auf Ubuntuusers zu Umgebungsvariablen
https://wiki.ubuntuusers.de/Umgebungsvariable/

[13] Beitrag auf Ubuntuusers zu Verknüpfungen
https://wiki.ubuntuusers.de/ln/

[14] Beitrag zur JVM auf Wikipedia
https://de.wikipedia.org/wiki/Java_Virtual_Machine