EN · DE · RU · FR · ES

#1874 : Version.java

projectforge-common/src/main/java/org/projectforge/Version.java Classe de domaine — package org.projectforge, projectforge-common/src/main/java/org/projectforge/Version.java 314 lignes · 223 code · 63 commentaires · 28 vides
Représentation de numéro de version sémantique et classe de comparaison. Analyse les chaînes de version aux formats #.#.#.# avec suffixes optionnels b{beta}, rc{candidat-de-version} et -SNAPSHOT. Implémente Comparable<Version> pour un ordonnancement correct (release > RC > beta, avec sous-comparaison numérique). Utilisé dans ProjectForge pour les vérifications de compatibilité des plugins et le versionnage des migrations de base de données.

Architecture

Importations

Hiérarchie de classes

Version implémente Comparable<Version>, Serializable

Composants de version

ComposantChampValeur par défaut/non définieExemple
Version majeuremajorRelease03.5.4.2 → major=3
Version mineureminorRelease03.5.4.2 → minor=5
Niveau de correctifpatchLevel03.5.4.2 → patch=4
Numéro de buildbuildNumber03.5.4.2 → build=2
Version bêtabetaVersionInteger.MAX_VALUE (pas bêta)3.5b2 → beta=2
Version RCreleaseCandidateVersionInteger.MAX_VALUE (pas RC)3.5rc1 → rc=1
Indicateur snapshotsnapshotfalse3.5-SNAPSHOT

Format d'analyse

Le constructeur de chaîne accepte ces motifs (insensibles à la casse pour les suffixes) :

Logique de comparaison (compareTo)

La comparaison suit une hiérarchie stricte :

  1. Version majeure → Version mineure → Niveau de correctif → Numéro de build (comparaison numérique)
  2. Version finale vs pré-version : Si les versions diffèrent par le statut de pré-version :
    • La version finale est SUPÉRIEURE à RC
    • RC est SUPÉRIEUR à bêta
    • Bêta est INFÉRIEUR à la version finale
  3. Si les deux sont RC : comparer les numéros de version RC
  4. Si les deux sont bêta : comparer les numéros de version bêta

Cet ordonnancement garantit : 3.5b1 < 3.5rc1 < 3.5 — essentiel pour déterminer si une migration de base de données ou une mise à jour de plugin est nécessaire.

Traitement spécial : Espace réservé Gradle

La méthode parseInt() détecte le jeton non développé de Gradle "gradle.version" et le traite comme 0, en journalisant un avertissement. Cela gère le cas où les informations de version sont compilées dans un JAR au moment du build et où la propriété de version Gradle n'a pas encore été résolue (p. ex., lors d'exécutions de tests dans l'IDE).

Format toString()

L'utilisation de Integer.MAX_VALUE comme sentinelle pour « pas bêta/RC » est une décision de conception élégante. Elle garantit que, dans la comparaison numérique, une version non bêta se compare toujours comme supérieure à toute version bêta (car MAX_VALUE est le plus grand entier possible), tout en permettant une comparaison numérique directe lorsque les deux sont bêta/RC.
La méthode compareTo NE prend PAS en compte l'indicateur snapshot dans l'ordonnancement. Deux versions ne différant que par le statut snapshot (p. ex., "3.5" vs "3.5-SNAPSHOT") seraient considérées comme égales. Cela peut être intentionnel — les snapshots indiquent des métadonnées de build plutôt que des différences de version sémantique.

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes de fichiers source : 2024 -> 2025.
0237d5eba Sérialisation JSON refactorisée : IdOnlySerializer et IdsOnlySerializer introduits.
6f7e0fbc7 Travaux de migration en cours...
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.
5f7ef41b8 Copyright 2021 -> 2022
ceb63e8a1 En-tête de code source : (C) 2001-2021.