Version.java#.#.#.# mit optionalen Suffixen b{beta}, rc{release-candidate} und -SNAPSHOT. Implementiert Comparable<Version> für eine korrekte Sortierung (Release > RC > Beta, mit numerischem Untervergleich). Wird in ProjectForge für Plugin-Kompatibilitätsprüfungen und Datenbankmigrations-Versionierung verwendet.java.io.Serializable — Versionen werden serialisiert (z. B. in Datenbank-Plugin-Versionseinträgen gespeichert)org.apache.commons.lang3.StringUtils — Zeichenkettenaufteilung zum Analysieren von punktgetrennten Versionskomponentenorg.slf4j.Logger — Protokollierung über SLF4J (Fehlerprotokollierung für fehlerhafte Versionszeichenfolgen)Version implements Comparable<Version>, Serializable
</>-Operatoren verglichen werden| Komponente | Feld | Standard-/Nicht gesetzter Wert | Beispiel |
|---|---|---|---|
| Hauptversion | majorRelease | 0 | 3.5.4.2 → major=3 |
| Nebenversion | minorRelease | 0 | 3.5.4.2 → minor=5 |
| Patch-Level | patchLevel | 0 | 3.5.4.2 → patch=4 |
| Build-Nummer | buildNumber | 0 | 3.5.4.2 → build=2 |
| Beta-Version | betaVersion | Integer.MAX_VALUE (kein Beta) | 3.5b2 → beta=2 |
| RC-Version | releaseCandidateVersion | Integer.MAX_VALUE (kein RC) | 3.5rc1 → rc=1 |
| Snapshot-Flag | snapshot | false | 3.5-SNAPSHOT |
Der Zeichenfolgenkonstruktor akzeptiert diese Muster (Groß-/Kleinschreibung bei Suffixen wird ignoriert):
"3" → major=3"3.5" → major=3, minor=5"3.5.4" → major=3, minor=5, patch=4"3.5.4.2" → major=3, minor=5, patch=4, build=2"3.5b2" oder "3.5b" → beta=2 oder beta=0"3.5rc1" oder "3.5rc" → rc=1 oder rc=0"3.5-SNAPSHOT" oder "3.5-snapshot" → snapshot=true"3.5.4.2b2-SNAPSHOT"Der Vergleich folgt einer strengen Hierarchie:
Diese Sortierung stellt sicher: 3.5b1 < 3.5rc1 < 3.5 — entscheidend für die Bestimmung, ob eine Datenbankmigration oder ein Plugin-Upgrade erforderlich ist.
Die Methode parseInt() erkennt das nicht expandierte Gradle-Token "gradle.version" und behandelt es als 0, wobei eine Warnung protokolliert wird. Dies behandelt den Fall, dass Versionsinformationen zur Build-Zeit in ein JAR kompiliert werden und die Gradle-Versionseigenschaft noch nicht aufgelöst wurde (z. B. bei IDE-Testläufen).
3.5 (patch=0, build=0) → "3.5"3.5.4 (patch≠0, build=0) → "3.5.4"3.5.4.2 (alle Teile) → "3.5.4.2"3.5b2 (Beta) → "3.5b2"3.5rc1 (RC) → "3.5rc1"3.5-SNAPSHOT (Snapshot) → "3.5-SNAPSHOT"Integer.MAX_VALUE als Sentinel für "kein Beta/RC" ist eine elegante Designentscheidung. Sie stellt sicher, dass eine Nicht-Beta-Version im numerischen Vergleich immer höher ist als jede Beta-Version (da MAX_VALUE die größtmögliche ganze Zahl ist), während dennoch ein direkter numerischer Vergleich möglich ist, wenn beide Beta/RC sind.compareTo berücksichtigt das Snapshot-Flag NICHT bei der Sortierung. Zwei Versionen, die sich nur durch den Snapshot-Status unterscheiden (z. B. "3.5" vs. "3.5-SNAPSHOT"), würden als gleich verglichen. Dies könnte beabsichtigt sein – Snapshots kennzeichnen Build-Zeit-Metadaten und keine semantischen Versionsunterschiede.868d6abb7 2025 -> 2026 63081666f Quelltextdatei-Header: 2024 -> 2025. 0237d5eba JSON-Serialisierung umgestaltet: IdOnlySerializer und IdsOnlySerializer eingeführt. 6f7e0fbc7 Migrationskram in Arbeit... b6092df09 Copyright 2023 -> 2024 ab45d51fa Copyright 2001-2022 -> 2001-2023. 5f7ef41b8 Copyright 2021 -> 2022 ceb63e8a1 Quelltextkopf: (C) 2001-2021.