---
title: 'Versionskennungen aufbauen, parsen, vergleichen'
url: 'https://tutego.de/blog/javainsel/2017/06/versionskennungen-aufbauen-parsen-vergleichen'
markdown: 'https://tutego.de/blog/javainsel/2017/06/versionskennungen-aufbauen-parsen-vergleichen.md'
date: '2017-06-01'
description: 'In Java 9 wurde die Kennung für die Java-Version standardisiert. Wo früher von zum Beispiel 1.9.0_31-b08 die Rede war, heißt es heute 9.1.4+8; die 1. ist also verständig verschwunden. Auch eigene Programme können Versionskennungen nutzen und die Java SE stellt eine Klasse bereit, mit der sich zum B…'
taxonomy:
  category:
    - Allgemein
    - Insel
    - 'Java 9'
---

# Versionskennungen aufbauen, parsen, vergleichen

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## Versionskennungen aufbauen, parsen, vergleichen

01.06.2017 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

In Java 9 wurde die Kennung für die Java-Version standardisiert. Wo früher von zum Beispiel 1.9.0\_31-b08 die Rede war, heißt es heute 9.1.4+8; die 1. ist also verständig verschwunden. Auch eigene Programme können Versionskennungen nutzen und die Java SE stellt eine Klasse bereit, mit der sich zum Beispiel Versionen vergleichen lassen. Details zu den sogenannten semantischen Versionierung liefert <http://semver.org/lang/de/>.

#### Versionskennung

Ein Versionskennung hat die Form $MAJOR.$MINOR.$SECURITY. Das Schema besteht aus drei Teilen, die durch Punkte voneinander getrennt sind:

1. Hautversion (engl. major version). Wird immer bei zentralen Änderungen und Updates um eine Stelle erhöht. Oft verbunden mit inkompatiblen API-Änderungen. Dann wird die Unterversion zurück auf 0 gesetzt.
2. Unterversion (engl. minor verson). Wird erhöht bei kleineren Änderungen, wie Bug-Fixes. Das Release selbst bleibt rückwärtskompatibel.
3. Sicherheitsrelease/Patch. Wird erhöht nach kritischen Sicherheitsupdates. Wichtig: Die Release-Nummer wird nicht auf 0 zurückgesetzt, wenn die Unterversion erhöht wird. Ein hoher Zähler der Sicherheitsreleases weist auf viele Änderungen hin, unabhängig von der Unterversion.

Die Versionen sind rein numerisch und der Gesamtstring matcht auf den regulären Ausdruck \[1-9\]\[0-9\]\*((\\.0)\*\\.\[1-9\]\[0-9\]\*)\*. Die Kennung endet nicht mit 0 – so wird $SECURITY weggelassen, wenn sie 0 ist und $MINOR wird nicht gesetzt, wenn $MINOR und $SECURITY beide 0 sind.

#### Versionsstring

Ein Versionsstring ist eine Versionskennung mit einem optionalen Zusatz von Informationen wie einer Vorversion (engl. pre release) oder Build-Informationen. Den Aufbau erklärt die API-Dokumentation an der Klasse Runtime.Version.

#### Version-API

Die Runtime-Klasse hat unter Java 9 eine innere Klasse Version bekommen, die so einen Versionsstring aufbauen und parsen kann. Die Version der aktuellen Laufzeitumgebung liefert die statische Methode `version()`.

Beispiel

Gib alle Informationen über den Versionsstring aus:

```java
System.out.println( Runtime.version() ); // 9-ea+159

System.out.println( Runtime.version().major() ); // 9

System.out.println( Runtime.version().minor() ); // 0

System.out.println( Runtime.version().security() ); // 0

System.out.println( Runtime.version().pre() ); // ea

System.out.println( Runtime.version().build() ); // 159

System.out.println( Runtime.version().optional() ); // Optional.empty
```

Eigene Version-Objekte lassen sich aus einem Versionsstring aufbauen mit der einzigen statischen Methode der Klasse Version, und zwar `parse(String)`.

Beispiel

```java
Version version = Version.parse( "9.2.4+45" );

System.out.println( version.version() );  // [9, 2, 4]
```

An dem Beispiel ist auch `version()` abzulesen, die eine numerische Liste mit Versionsnummern liefert.

Neben diesen Abfragemethoden kommen weitere Methoden hinzu. Zunächst überschreibt Version die `Object`-Methoden `equals(…)`, `hashCode()` und `toString()`. Und da Version die Schnittstelle `Comparable`<Runtime.Version> implementiert, hat die Klasse eine Methode `compareTo(Runtime.Version)`, was die Versionsnummern in eine Ordnung bringt. Zusätzlich gibt es `compareToIgnoreOptional(Runtime.Version)` und `equalsIgnoreOptional(Object)`, was so etwas wie Build-Informationen ignoriert.

Kategorien: [Allgemein](https://tutego.de/blog/javainsel/category/allgemein/), [Insel](https://tutego.de/blog/javainsel/category/insel/), [Java 9](https://tutego.de/blog/javainsel/category/java-9/)

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Next: [Video: Eclipse-Shortcuts und Java 8 Features](https://tutego.de/blog/javainsel/2017/06/video-eclipse-shortcuts-und-java-8-features.md)
