{"id":3847,"date":"2017-06-01T08:11:54","date_gmt":"2017-06-01T06:11:54","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3847"},"modified":"2017-06-01T08:11:54","modified_gmt":"2017-06-01T06:11:54","slug":"versionskennungen-aufbauen-parsen-vergleichen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2017\/06\/versionskennungen-aufbauen-parsen-vergleichen\/","title":{"rendered":"Versionskennungen aufbauen, parsen, vergleichen"},"content":{"rendered":"<p>In Java 9 wurde die Kennung f\u00fcr die Java-Version standardisiert. Wo fr\u00fcher von zum Beispiel 1.9.0_31-b08 die Rede war, hei\u00dft es heute 9.1.4+8; die 1. ist also verst\u00e4ndig verschwunden. Auch eigene Programme k\u00f6nnen 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\/.<\/p>\n<h4>Versionskennung<\/h4>\n<p>Ein Versionskennung hat die Form $MAJOR.$MINOR.$SECURITY. Das Schema besteht aus drei Teilen, die durch Punkte voneinander getrennt sind:<\/p>\n<ol>\n<li>Hautversion (engl. major version). Wird immer bei zentralen \u00c4nderungen und Updates um eine Stelle erh\u00f6ht. Oft verbunden mit inkompatiblen API-\u00c4nderungen. Dann wird die Unterversion zur\u00fcck auf 0 gesetzt.<\/li>\n<li>Unterversion (engl. minor verson). Wird erh\u00f6ht bei kleineren \u00c4nderungen, wie Bug-Fixes. Das Release selbst bleibt r\u00fcckw\u00e4rtskompatibel.<\/li>\n<li>Sicherheitsrelease\/Patch. Wird erh\u00f6ht nach kritischen Sicherheitsupdates. Wichtig: Die Release-Nummer wird nicht auf 0 zur\u00fcckgesetzt, wenn die Unterversion erh\u00f6ht wird. Ein hoher Z\u00e4hler der Sicherheitsreleases weist auf viele \u00c4nderungen hin, unabh\u00e4ngig von der Unterversion.<\/li>\n<\/ol>\n<p>Die Versionen sind rein numerisch und der Gesamtstring matcht auf den regul\u00e4ren Ausdruck [1-9][0-9]*((\\.0)*\\.[1-9][0-9]*)*. Die Kennung endet nicht mit 0 \u2013 so wird $SECURITY weggelassen, wenn sie 0 ist und $MINOR wird nicht gesetzt, wenn $MINOR und $SECURITY beide 0 sind.<\/p>\n<h4>Versionsstring<\/h4>\n<p>Ein Versionsstring ist eine Versionskennung mit einem optionalen Zusatz von Informationen wie einer Vorversion (engl. pre release) oder Build-Informationen. Den Aufbau erkl\u00e4rt die API-Dokumentation an der Klasse Runtime.Version.<\/p>\n<h4>Version-API<\/h4>\n<p>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().<\/p>\n<p>Beispiel<\/p>\n<p>Gib alle Informationen \u00fcber den Versionsstring aus:<\/p>\n<pre>System.out.println( Runtime.version() ); \/\/ 9-ea+159\n\nSystem.out.println( Runtime.version().major() ); \/\/ 9\n\nSystem.out.println( Runtime.version().minor() ); \/\/ 0\n\nSystem.out.println( Runtime.version().security() ); \/\/ 0\n\nSystem.out.println( Runtime.version().pre() ); \/\/ ea\n\nSystem.out.println( Runtime.version().build() ); \/\/ 159\n\nSystem.out.println( Runtime.version().optional() ); \/\/ Optional.empty<\/pre>\n<p>Eigene Version-Objekte lassen sich aus einem Versionsstring aufbauen mit der einzigen statischen Methode der Klasse Version, und zwar parse(String).<\/p>\n<p>Beispiel<\/p>\n<pre>Version version = Version.parse( \"9.2.4+45\" );\n\nSystem.out.println( version.version() );\u00a0 \/\/ [9, 2, 4]<\/pre>\n<p>An dem Beispiel ist auch version() abzulesen, die eine numerische Liste mit Versionsnummern liefert.<\/p>\n<p>Neben diesen Abfragemethoden kommen weitere Methoden hinzu. Zun\u00e4chst \u00fcberschreibt Version die Object-Methoden equals(\u2026), hashCode() und toString(). Und da Version die Schnittstelle Comparable&lt;Runtime.Version&gt; implementiert, hat die Klasse eine Methode compareTo(Runtime.Version), was die Versionsnummern in eine Ordnung bringt. Zus\u00e4tzlich gibt es compareToIgnoreOptional(Runtime.Version) und equalsIgnoreOptional(Object), was so etwas wie Build-Informationen ignoriert.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Java 9 wurde die Kennung f\u00fcr die Java-Version standardisiert. Wo fr\u00fcher von zum Beispiel 1.9.0_31-b08 die Rede war, hei\u00dft es heute 9.1.4+8; die 1. ist also verst\u00e4ndig verschwunden. Auch eigene Programme k\u00f6nnen Versionskennungen nutzen und die Java SE stellt eine Klasse bereit, mit der sich zum Beispiel Versionen vergleichen lassen. Details zu den sogenannten [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1,11,85],"tags":[],"class_list":["post-3847","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-insel","category-java-9"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3847","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=3847"}],"version-history":[{"count":2,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3847\/revisions"}],"predecessor-version":[{"id":3849,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3847\/revisions\/3849"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3847"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3847"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3847"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}