Version.java#.#.#.# con sufijos opcionales b{beta}, rc{candidato-a-lanzamiento} y -SNAPSHOT. Implementa Comparable<Version> para un orden correcto (lanzamiento > RC > beta, con subcomparación numérica). Se utiliza en todo ProjectForge para comprobaciones de compatibilidad de complementos y versionado de migraciones de base de datos.java.io.Serializable — Las versiones se serializan (p. ej., almacenadas en registros de versión de complementos en la base de datos)org.apache.commons.lang3.StringUtils — División de cadenas para analizar componentes de versión punteadosorg.slf4j.Logger — Registro mediante SLF4J (registro de errores para cadenas de versión mal formadas)Version implements Comparable<Version>, Serializable
</> en Kotlin| Componente | Campo | Valor predeterminado/sin establecer | Ejemplo |
|---|---|---|---|
| Lanzamiento principal | majorRelease | 0 | 3.5.4.2 → major=3 |
| Lanzamiento menor | minorRelease | 0 | 3.5.4.2 → minor=5 |
| Nivel de parche | patchLevel | 0 | 3.5.4.2 → patch=4 |
| Número de compilación | buildNumber | 0 | 3.5.4.2 → build=2 |
| Versión beta | betaVersion | Integer.MAX_VALUE (no beta) | 3.5b2 → beta=2 |
| Versión RC | releaseCandidateVersion | Integer.MAX_VALUE (no RC) | 3.5rc1 → rc=1 |
| Indicador de snapshot | snapshot | false | 3.5-SNAPSHOT |
El constructor de cadena acepta estos patrones (no distingue entre mayúsculas y minúsculas para los sufijos):
"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" o "3.5b" → beta=2 o beta=0"3.5rc1" o "3.5rc" → rc=1 o rc=0"3.5-SNAPSHOT" o "3.5-snapshot" → snapshot=true"3.5.4.2b2-SNAPSHOT"La comparación sigue una jerarquía estricta:
Este orden garantiza: 3.5b1 < 3.5rc1 < 3.5 — fundamental para determinar si se necesita una migración de base de datos o una actualización de complemento.
El método parseInt() detecta el token no expandido de Gradle "gradle.version" y lo trata como 0, registrando una advertencia. Esto maneja el caso en que la información de versión se compila en un JAR durante la compilación y la propiedad de versión de Gradle aún no se ha resuelto (p. ej., en ejecuciones de prueba del IDE).
3.5 (patch=0, build=0) → "3.5"3.5.4 (patch≠0, build=0) → "3.5.4"3.5.4.2 (todas las partes) → "3.5.4.2"3.5b2 (beta) → "3.5b2"3.5rc1 (RC) → "3.5rc1"3.5-SNAPSHOT (snapshot) → "3.5-SNAPSHOT"Integer.MAX_VALUE como valor centinela para "no beta/RC" es una decisión de diseño elegante. Garantiza que, en la comparación numérica, una versión no beta siempre se compare como superior a cualquier versión beta (ya que MAX_VALUE es el entero más grande posible), al tiempo que permite la comparación numérica directa cuando ambas son beta/RC.compareTo NO considera el indicador de snapshot en el orden. Dos versiones que difieren solo por el estado de snapshot (p. ej., "3.5" vs "3.5-SNAPSHOT") se compararían como iguales. Esto puede ser intencional: los snapshots indican metadatos de tiempo de compilación en lugar de diferencias semánticas de versión.868d6abb7 2025 -> 2026 63081666f Encabezados de archivos fuente: 2024 -> 2025. 0237d5eba Serialización JSON refactorizada: se introdujeron IdOnlySerializer e IdsOnlySerializer. 6f7e0fbc7 Trabajo de migración en curso... b6092df09 Derechos de autor 2023 -> 2024 ab45d51fa Derechos de autor 2001-2022 -> 2001-2023. 5f7ef41b8 Derechos de autor 2021 -> 2022 ceb63e8a1 Encabezado de código fuente: (C) 2001-2021.