2010-11-04 12 views
20

Notre référentiel interne (Artifactory) contient maintenant les versions stables ainsi que les versions SNAPSHOT de nos bibliothèques internes.Maven ne parvient pas à obtenir les builds SNAPSHOT à partir du dépôt

Pour les versions stables, il n'y a jamais eu de problème de téléchargement depuis le référentiel. Cependant, lorsque j'ajoute un -SNAPSHOT, Maven prétend ne pas pouvoir trouver la dépendance, même si elle est définitivement dans le référentiel.

Si je compile et déploie la dépendance localement (c'est-à-dire dans mon référentiel local), tout fonctionne normalement.

En gros, cela fonctionne:

<dependency> 
    <groupId>com.example</groupId> 
    <artifactId>ourlibrary</artifactId> 
    <version>1.0.0</version> 
</dependency> 

et cela ne:

<dependency> 
    <groupId>com.example</groupId> 
    <artifactId>ourlibrary</artifactId> 
    <version>1.0.1-SNAPSHOT</version> 
</dependency> 

Même si les deux versions ont été construites de la même façon et déployées (pour autant que je peux peut-être dire) correctement au référentiel.

L'erreur:

Missing: 
---------- 

1) com.example:ourlibrary:jar:1.0.1-SNAPSHOT, 

    Try downloading the file manually from the project website. 

    Then, install it using the command: 
     mvn install:install-file -DgroupId=com.example -DartifactId=ourlibrary -Dversion=1.0.1-SNAPSHOT, -Dpackaging=jar -Dfile=/path/to/file 

    Alternatively, if you host your own repository you can deploy the file there: 
     mvn deploy:deploy-file -DgroupId=com.example -DartifactId=ourlibrary -Dversion=1.0.1-SNAPSHOT, -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id] 

    Path to dependency: 
     1) com.example:product:war:2.0.0-SNAPSHOT 
     2) com.example:ourlibrary:jar:1.0.1-SNAPSHOT, 

Bien que cela semble similaire à this question, la résolution est arrivé à il ne concerne pas mon cas.

Toute idée sur ce problème serait grandement appréciée.

Modifier

Courir avec -X (comme John V. a suggéré) a révélé ce qui suit:

[DEBUG] Skipping disabled repository central 
[DEBUG] ourlibrary: using locally installed snapshot 
[DEBUG] Skipping disabled repository central 
[DEBUG] Using mirror: http://repo.example.com/repo (id: repo.example.com) 
[DEBUG] Artifact not found - using stub model: Unable to download the artifact from any repository 

    com.example:ourlibrary:pom:1.0.1-SNAPSHOT 

from the specified remote repositories: 
    repo.example.com (http://repo.example.com/repo) 


[DEBUG] Using defaults for missing POM com.example:ourlibrary:pom:1.0.1-SNAPSHOT:compile 
[DEBUG] com.example:ourlibrary:jar:1.0.1-SNAPSHOT:compile (selected for compile) 

Répondre

12

Deux pensées viennent à l'esprit:

  1. La structure de chemin votre référentiel interne pour votre artefact est incorrect. Je suggère d'exécuter la commande maven avec le paramètre -X. Il affichera la tentative du maven au en téléchargeant les fichiers. Obtenez la ligne qui a votre référentiel en tant qu'url et essayez de le rechercher vous-même.

    Le chemin doit ressembler à

    /com/example/ourlibrary/1.0.1/ourlibrary-1.0.1-SNAPSHOT.jar

  2. Vous na pas inclure votre dépôt comme un dépôt dans votre pom. xml
+2

Je n'ai pas déclarer la prise en pension dans le POM, mais spécifié dans les paramètres de Maven que notre repo était universel (*) miroir.Cela ne devrait-il pas être suffisant (c'est certainement suffisant pour les constructions stables)? L'ajout d'une déclaration explicite au POM semble résoudre le problème. – Kris

+0

Malheureusement, je n'ai pas trop travaillé avec settings.xml pour les dépôts. Je les ai inclus dans un pom parent, donc tout développeur débutant ne doit pas s'inquiéter de settings.xml au cas où le référentiel doit changer (ce qu'il a réellement pour nous) –

+14

Je pense que j'ai raisonné cela. Pour les versions stables, Maven sera par défaut 'central', ce que mes paramètres miroir redirigent vers notre référentiel. Pour les constructions SNAPSHOT il n'y a pas de défaut (car le central ne les gère pas) et en l'absence du POM spécifiant un repo (qui * gère * les constructions SNAPSHOT), il échouera simplement sans même essayer de le rechercher. – Kris

11

Généralement, vous avez une URL d'instantanés séparée à partir de l'URL des versions. Juste différents chemins dans le même référentiel, mais répertoriés comme des référentiels distincts dans le pom. L'un des clichés doit avoir des instantanés permis, et celle pour les versions a snapshots désactivé:

<repositories> 
     <repository> 
      <id>central</id> 
      <url> 
       http://<releases-url> 
      </url> 
      **<snapshots> 
       <enabled>false</enabled> 
      </snapshots>** 
     </repository> 

     <repository> 
      <id>snapshots</id> 
      <url> 
       http://<snapshots-url> 
      </url> 
      <snapshots> 
       **<enabled>true</enabled>** 
       <!-- never, daily, interval:X (where X is in minutes) or always --> 
       <!--<updatePolicy>daily</updatePolicy> --> 
      </snapshots> 
      <releases> 
       <enabled>false</enabled> 
      </releases> 
     </repository> 
    </repositories> 
+0

Cela fonctionne bien que vous devriez noter que cela se passe dans la section des profils du fichier settings.xml Maven. – Kris

+0

Nous le conservons dans notre fichier pom master/parent dont tous nos projets héritent. De cette façon, les développeurs n'ont pas à configurer cela dans leurs fichiers settings.xml. Le fichier Settings.xml concerne principalement les éléments propres à la machine ou à l'utilisateur, et tous les développeurs d'un projet doivent généralement utiliser le même référentiel. Alors que vous pouvez mettre des dépôts dans le fichier settings.xml, je pense que ce serait un cas d'exception, et non la norme. – kevinmrohr

+0

Très étrange, que je peux déployer des instantanés sans cela, mais il n'est pas possible de télécharger des images instantanées déployées. La configuration du profil fonctionne bien. – Betlista