REMARQUE:
Cette réponse s'applique uniquement à Maven 2! Les métaversions mentionnées LATEST
et ont été supprimées dans Maven 3 "pour des constructions reproductibles" , il y a plus de 6 ans. Veuillez vous référer à cette solution compatible Maven 3RELEASE
.
Si vous souhaitez toujours utiliser la version la plus récente, Maven dispose de deux mots clés que vous pouvez utiliser comme alternative aux plages de versions. Vous devez utiliser ces options avec précaution car vous ne contrôlez plus les plugins / dépendances que vous utilisez.
Lorsque vous dépendez d'un plugin ou d'une dépendance, vous pouvez utiliser la valeur de version a LATEST ou RELEASE. LATEST fait référence à la dernière version publiée ou instantanée d'un artefact particulier, l'artefact le plus récemment déployé dans un référentiel particulier. RELEASE fait référence à la dernière version non instantanée dans le référentiel. En général, il n'est pas recommandé de concevoir un logiciel qui dépend d'une version non spécifique d'un artefact. Si vous développez un logiciel, vous souhaiterez peut-être utiliser RELEASE ou LATEST pour ne pas avoir à mettre à jour les numéros de version lorsqu'une nouvelle version d'une bibliothèque tierce est publiée. Lorsque vous publiez un logiciel, vous devez toujours vous assurer que votre projet dépend de versions spécifiques pour réduire les risques que votre build ou votre projet soit affecté par une version logicielle qui n'est pas sous votre contrôle.
Voir la section Syntaxe POM du livre Maven pour plus de détails. Ou consultez ce document sur les plages de versions des dépendances , où:
- Un crochet (
[
& ]
) signifie "fermé" (inclus).
- Une parenthèse (
(
& )
) signifie "ouvert" (exclusif).
Voici un exemple illustrant les différentes options. Dans le référentiel Maven, com.foo:my-foo contient les métadonnées suivantes:
<?xml version="1.0" encoding="UTF-8"?><metadata>
<groupId>com.foo</groupId>
<artifactId>my-foo</artifactId>
<version>2.0.0</version>
<versioning>
<release>1.1.1</release>
<versions>
<version>1.0</version>
<version>1.0.1</version>
<version>1.1</version>
<version>1.1.1</version>
<version>2.0.0</version>
</versions>
<lastUpdated>20090722140000</lastUpdated>
</versioning>
</metadata>
Si une dépendance à cet artefact est requise, vous disposez des options suivantes (d'autres gammes de versions peuvent être spécifiées bien sûr, en affichant simplement celles pertinentes ici):
Déclarez une version exacte (sera toujours résolue en 1.0.1):
<version>[1.0.1]</version>
Déclarez une version explicite (sera toujours résolue en 1.0.1 sauf si une collision se produit, lorsque Maven sélectionnera une version correspondante):
<version>1.0.1</version>
Déclarez une plage de versions pour tous les 1.x (se résoudra actuellement en 1.1.1):
<version>[1.0.0,2.0.0)</version>
Déclarez une plage de versions ouverte (résoudra en 2.0.0):
<version>[1.0.0,)</version>
Déclarez la version comme DERNIÈRE (résoudra en 2.0.0) (supprimée de maven 3.x)
<version>LATEST</version>
Déclarez la version comme RELEASE (résoudra en 1.1.1) (supprimée de maven 3.x):
<version>RELEASE</version>
Notez que par défaut, vos propres déploiements mettront à jour la "dernière" entrée dans les métadonnées Maven, mais pour mettre à jour l'entrée "release", vous devez activer le "release-profile" à partir du super POM Maven . Vous pouvez le faire avec "-Prelease-profile" ou "-DperformRelease = true"
Il convient de souligner que toute approche qui permet à Maven de choisir les versions de dépendance (LATEST, RELEASE et plages de versions) peut vous laisser ouvert pour créer des problèmes de temps, car les versions ultérieures peuvent avoir un comportement différent (par exemple, le plug-in de dépendance a précédemment changé de valeur par défaut). valeur de vrai à faux, avec des résultats confus).
C'est donc généralement une bonne idée de définir des versions exactes dans les versions. Comme le souligne la réponse de Tim , le plugin maven-versions- est un outil pratique pour mettre à jour les versions de dépendance, en particulier les versions: use-latest-versions et versions: use-latest-releases objectives.