web-dev-qa-db-fra.com

Maven SNAPSHOT mise à jour automatique

Disons que j'ai un projet avec le POM suivant:

<groupId>com.mine</groupId>
<artifactId>coreJar</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>

Et puis, dans un autre projet, je veux toujours faire référence au dernier SNAPSHOT:

<dependencies> 
    <dependency>
        <groupId>com.mine</groupId>
        <artifactId>coreJar</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    ...
<dependencies> 

Mais au lieu de 0.0.1-SNAPSHOT, je veux qu’il récupère toujours la dernière version de SNAPSHOT. Dans le passé, vous pouviez utiliser LATEST, mais cela a depuis été déconseillé (pour des raisons raisonnables).

Je comprends/ vous pouvez spécifier des versions , telles que:

[1.5,)

Mais je ne pourrais jamais le faire fonctionner avec un "-SNAPSHOT": 

[0.0.1,)-SNAPSHOT // Doesn't work!

La question est alors comment puis-je obtenir que Maven saisisse le dernier aperçu de mon autre projet?

28
Stephane Grenier

Quelques mots sur les plages de dépendance et les dépendances SNAPSHOT (citant le Médiation de dépendance et résolution de conflit document de conception):

Incorporer les versions SNAPSHOT dans la spécification

La résolution des plages de dépendance ne doit pas être transformée en un instantané (version de développement) à moins qu'il ne soit inclus en tant que limite explicite. Il n'est pas nécessaire de compiler avec du code de développement, sauf si vous utilisez explicitement une nouvelle fonctionnalité, en vertu de laquelle l'instantané deviendra la limite inférieure de votre spécification de version. Les versions étant considérées comme plus récentes que l’instantané auquel elles appartiennent, elles seront choisies par rapport à un ancien instantané si elles sont trouvées.

Donc, pour répondre à votre question, le seul moyen d’utiliser un SNAPSHOT avec des plages de dépendance est la limite et vous n’obtiendrez pas automatiquement de versions SNAPSHOT supérieures par conception (ce qui {vraiment} est logique). 

Personnellement, je n'aime pas utiliser les plages de dépendance car je trouve que cela peut entraîner des problèmes de reproductibilité et rendre la construction plus fragile. Je ne les recommande pas.

Juste au cas où, la mise à niveau de la version SNAPSHOT signifie généralement que vous publiez du code et que le plug-in maven release prend en charge cette opération (voir Mise à jour des versions de POM ).

13
Pascal Thivent

Une autre option (que j'utilise) consiste à inclure les éléments suivants dans votre pom.xml. La balise updatePolicy obligera maven à toujours utiliser le dernier instantané de ce dépôt.

<repositories>
    <repository>
        <id>you-snapshots</id>
        <url>http://Host/nexus/repos/snapshots</url>
        <snapshots>
            <updatePolicy>always</updatePolicy>
        </snapshots>
        <releases>
            <updatePolicy>always</updatePolicy>
        </releases>
    </repository>
</repositories>

p.s. Je configure toujours tous les dépôts dans pom.xml car nous utilisons plusieurs serveurs CI et il sera assez difficile de les configurer tous (je suis paresseux ...)

Doc on settings.xml updatePolicy pour référence .The frequency for downloading updates - can be "always", "daily" (default), "interval:XXX" (in minutes) or "never" (only if it doesn't exist locally).

43
Worker

Utilisation 

mvn -U, --update-snapshots 

Forces a check for updated releases and snapshots on remote repository

13
Tim

Il existe un Versions plugin pour Maven qui vous permet de mettre à jour votre pom avec les plus récents SNAPSHOTS dans des référentiels visibles. Pour ce faire, il inspecte votre pom, le compare à des référentiels distants, puis le modifie au besoin. 

C'est un outil utile mais j'aimerais vraiment voir un équivalent à l'option obsolète LATEST. Je trouve ce type de dépendance particulièrement utile dans les scénarios d'intégration continue.

8
Martin

utiliser mvn install -U u doit l’utiliser pour forcer maven à obtenir les derniers instantanés

3

Ses 

<version>[0.0-SNAPSHOT,)</version>
1
Dimath

Si vous souhaitez mettre à jour vos versions de SNAPSHOT dans Eclipse (lorsque vous utilisez m2e/m2Eclipse), cliquez avec le bouton droit de la souris sur le projet concerné, puis sélectionnez "Maven" -> "Mettre à jour le projet ..." -> "OK" ).

0
Abdull