So kannst du deine Java-Version überprüfen und die verwendete JRE finden

Manchmal ist es wichtig, deine Java-Version und den Pfad deiner Java Runtime zu kennen. Möglicherweise hast du verschiedene Java-Versionen auf deinem Computer und dein Programm verhält sich nicht wie es sollte.

So kannst du überprüfen, welche Java-Runtime (JRE) dein Programm ausführt:

  • Du kannst deine Java-Version mit der Java-System Property „java.version“ überprüfen.
  • Die Java-Systemeigenschaft „java.home“ kann dir genau sagen, welche Java-Runtime-Umgebung dein Programm ausführt.

Was sind die Java System Properties?

Die Java-Klasse „System“ verfügt über eine Liste von „Properties“ (Eigenschafts), die über technsiche Details des Java-Systems Auskunft geben. Sie sind jeweils ein Paar aus einem Schlüssel (Name) und einem Wert. Das könnten z.B. sein: die aktuelle Java-Laufzeitumgebung, das Betriebssystem etc.

  • Du kannst System.getProperty(<Eigenschaftsname>) verwenden, um den Wert einer einzelnen Eigenschaft abzurufen.
  • Du kannst System.getProperties() verwenden, um eine Liste aller Systemeigenschaften zu erhalten.

So ermittelst du deine Java-Version

Dieser Code ermittelt deine Java-Version:

public class CheckJavaVersion {
    public static void main(String[] args) {
        String version = System.getProperty("java.version");
        System.out.println("Java version: " + version);
    }
}

Die Ausgabe könnte so aussehen:

Java-Version: 1.8.0_74

Diese Zeichenfolge enthält mehrere Zahlen. Hier ist

  • 1.8 die Hauptversion (major version)
  • 0 ist die Nebenversion (minor version)
  • 74 ist der Patch-Level

Für den Versionsstring gibt es zwei verschiedene Formate. Einer wird bis einschließlich Java 1.8 verwendet, der andere ab Java 9 oder höher. Dort wurde die führende „1.“ fallen gelassen. Hier sind einige Beispiele:

  • Java 8 oder niedriger: 1.6.0_23, 1.7.0, 1.7.0_80, 1.8.0_211
  • Java 9 oder höher: 9.0.1, 11.0.4, 12, 12.0.1

Wenn du dein Programm mit verschiedenen JREs ausführst, kannst du unterschiedliche Ergebnisse erhalten. Versuche zum Beispiel einmal, in deiner Java-IDE (wie z. B. Eclipse) die JRE zu wechseln. Du wirst sehen, dass sich das Ergebnis ändert.

Wenn du mindestens Java 9 hast, kannst du die Zeichenfolge mit diesem Programm leicht in ihre drei Teile aufsplitten:

public class CheckJavaVersion {
    public static void main(String[] args) {
        // Get the java.version property
        String version = System.getProperty("java.version");
        System.out.println("Java Version: " + version);

        // Use a regular expression to extract the major, minor, and patch components
        String[] components = version.split("[^\\d]+");
        int major = Integer.parseInt(components[0]);
        int minor = Integer.parseInt(components[1]);
        int patch = Integer.parseInt(components[2]);

        // Print the major, minor, and patch versions to the console
        System.out.println("Major Version: " + major);
        System.out.println("Minor Version: " + minor);
        System.out.println("Patch Version: " + patch);
    }
}

In meinem Fall bekomme ich (jetzt mit einer neueren JRE als bei dem obigen Beispiel)

Java Version: 18.0.1
Major Version: 18
Minor Version: 0
Patch Version: 1

So findest du die verwendete Java runtime

Manchmal möchtest du genau wissen, welche Java JRE dein Programm ausführt. Ähnlich wie in dem vorherigen Beispiel kannst du das über die Java System Properties ermitteln.

public class CheckJREPath {
    public static void main(String[] args) {
        String javaHome = System.getProperty("java.home");
        System.out.println("JRE path: " + javaHome);
    }
}

Wenn du dein JRE nicht genau angegeben hast, als du dein Programm aufgerufen hast, wirst du vielleicht überrascht sein, welche JRE du hier bekommst.

In meinem Fall war es:

JRE-Pfad: D:\install\jdk-18.0.1 

Der genaue Pfad kann je nach Systemkonfiguration und Betriebssystem in deinem Fall variieren.

So kannst du alle Java System Properties auflisten

Was können uns die Java-Systemeigenschaften noch erzählen? Lass uns die komplette Liste ausgeben.

Wir rufen die Methode System.getProperties() auf, um ein Properties-Objekt zu erhalten. Dies ist ein Container aller Systemeigenschaften. Anschließend gibt uns das Properties-Objekt mit der Methode entrySet() eine Liste aller Propertynamen zurück. Zu diesen beschaffen wir dann den jeweiligen Wert (Inhalt). Hier ist der Code:

import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class ListAllSystemProperties {
    public static void main(String[] args) {
        Properties properties = System.getProperties();
        Set<Map.Entry<Object, Object>> entrySet = properties.entrySet();
        for (Map.Entry<Object, Object> entry : entrySet) {
            System.out.println(entry.getKey() + " => " + entry.getValue());
        }
    }
}

Im meinem Fall bekomme ich mehr als 50 Einträge.

Hier sind einige Systemeigenschaften (system properties), die nützlich sein könnten:

  • os.name: Dies gibt den Namen des Betriebssystems zurück, auf dem deine Java Virtual Machine ausgeführt wird. In meinem Fall ist es „Windows 10“. Aber es könnte auch „Linux“ oder „Mac OS X“ sein.
  • os.version: Dies gibt die Version des Betriebssystems zurück, auf dem deine Java Virtual Machine ausgeführt wird. In meinem Fall ist es 10.0, da ich Windows 10 verwende.
  • os.arch: Dies gibt die Architektur des Betriebssystems zurück, auf dem die Java Virtual Machine ausgeführt wird. In meinem Fall ist es „amd64“. user.home: Dies ist das Home-Verzeichnis des Benutzers, der das Programm ausführt.
  • user.language: Dies ist die Sprache des Benutzers. In meinem Fall ist es „de“ für Deutsch.
  • user.dir: Dies gibt das aktuelle Arbeitsverzeichnis des Java-Prozesses zurück.
  • file.separator: Dies könnte wichtig sein. Es gibt das Trennzeichen für Dateinamen zurück, das vom Betriebssystem verwendet wird. Unix und Mac verwenden „/“ um die Bestandteile eines Verzeichnisnamens zu trennen. Windows hingegen verwendet „\“, z.B. „c:\temp\xzy\datei.txt“
    Wenn du in Java Pfadnamen zusammensetzen musst, musst du das richtige Trennzeichen verwenden. Wenn dein Programm auf einem Windows-System und auch auf einem Linux-System funktionieren soll, musst du je nach Plattform aufpassen und das richtige Trennzeichen verwenden.
  • line.separator: Dies ist ein ähnlicher Fall: In einer Textdatei wird ein Unix-System Zeilen mit „\n“ trennen, während Windows „\r\n“ verwendet.
  • path.separator: (Bitte nicht mit dem file separator verwechseln!). Der path separator is used, um mehrere Pfade/Dateinamen in einem String voneinander zu trennen. A wichtiges Beispiel ist die Umgebungsvariable PATH, die alle Verzeichnisse auflistet, in denen das Betriebtssystem nach ausführbaren Dateien sucht. Windows trennt die Einträge mittels „;“. Unix hingegen verwendet hier „:“. In Windows kannst du diesen Systempfad beispielsweise in der Windows Command Shell (“cmd”) anzeigen, wenn du “path” eingibst. Es wird dir dann eine lange Liste von Directories angezeigt, alle mit “;” voneinander getrennt.

Mehr Java-Tipps findest du hier.

heiko

Dipl.-Ing. Heiko Evermann

Vorheriger Artikel