9 votes

Maven : Pourquoi le suffixe -SNAPSHOT manque-t-il dans le nom du fichier d'artefact ?

Mon artefact maven est déployé dans un dépôt de snapshot Nexus. Là, il est stocké dans le bon répertoire, mais ses noms de fichiers ont le schéma suivant :

mylibrary-1.0-20130213.125827-2.jar

Cependant, Maven ne parvient pas à télécharger cet instantané. D'après le journal des erreurs, Maven semble s'attendre au nom de fichier suivant :

mylibrary-1.0-SNAPSHOT.jar

Ce sont les paramètres du dépôt dans mon pom :

<repositories>
    <repository>
        <id>mycompany-all</id>
        <url>https://servername/nexus/content/groups/mycompany/</url>
    </repository>
</repositories>

<distributionManagement>
    <repository>
        <id>mycompany-releases</id>
        <url>https://servername/nexus/content/repositories/releases/</url>
    </repository>
    <snapshotRepository>
        <id>mycompany-snapshots</id>
        <url>https://servername/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
</distributionManagement>

Remarque : le groupe nexus comprend à la fois le releases y snapshots repo.

Je n'ai pas configuré ces dépôts dans settings.xml - est-ce le problème ? Ou bien qu'est-ce que je fais de travers ?

14voto

Duncan Points 22780

Le modèle que vous avez posté ( mylibrary-1.0-20130213.125827-2.jar ) est une version unique de l'instantané. Maven 3 vous oblige à utiliser ce type d'appellation d'artefact, mais dans Maven 2, il est possible de l'éviter avec une déclaration telle que :

<distributionManagement>
  ...
  <snapshotRepository>
    ...
    <uniqueVersion>false</uniqueVersion>
  </snapshotRepository>
  ...
</distributionManagement>

Pour utiliser un instantané spécifique dans votre projet, déclarez-le comme :

<dependency>
  <groupId>com.foo</groupId>
  <artifactId>mylibrary</artifactId>
  <version>1.0-20130213.125827-2</version>
</dependency>

Pour utiliser le dernier snapshot connu, déclarez-le "old-style" :

<dependency>
  <groupId>com.foo</groupId>
  <artifactId>mylibrary</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

Vous trouverez peut-être la réponse à cette question question similaire utile également.

7voto

Jens Bannmann Points 1148

J'ai fait en sorte que cela fonctionne en ajoutant les dépôts à l'arborescence du site. settings.xml comme ça :

<repositories>
    <repository>
        <id>mycompany-releases</id>
        <url>https://servername/nexus/content/repositories/releases/</url>
        <releases><enabled>true</enabled></releases>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
    <repository>
        <id>mycompany-snapshots</id>
        <url>https://servername/nexus/content/repositories/snapshots/</url>
        <releases><enabled>false</enabled></releases>
        <snapshots><enabled>true</enabled></snapshots>
    </repository>
</repositories>

Ensuite, les fichiers jar SNAPSHOT ont été téléchargés sans problème. Je soupçonne que lorsque Maven sait qu'il a affaire à un repo snapshot, il essaie à la fois avec et sans uniqueVersion (voir la réponse de Duncan Jones).

Notez que dans notre cas, ces blocs ont dû être dupliqués en tant que pluginRepositories parce que nous avons des plugins Maven personnalisés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X