2010-11-04 12 views
20

Nuestro repositorio interno (Artifactory) ahora contiene tanto las compilaciones estables como las versiones SNAPSHOT de nuestras bibliotecas internas.Maven no puede obtener compilaciones SNAPSHOT del repositorio

Para compilaciones estables, nunca ha habido un problema al descargar nada del repositorio.

Sin embargo, cuando agrego un mensaje -SNAPSHOT, Maven dice que no puede encontrar la dependencia, aunque definitivamente está en el repositorio.

Si construyo y despliego la dependencia localmente (es decir, en mi repositorio local) todo funciona normalmente.

Básicamente, esto funciona:

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

y esto no es así:

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

A pesar de que ambas versiones fueron construidas de la misma manera y se despliegan (por lo que posiblemente puedo decir) correctamente al repositorio.

El error:

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, 

Si bien esto suena similar a this cuestión, la resolución no llegaron a no se aplica a mi caso.

Cualquier idea sobre este tema sería muy apreciada.

Editar

Correr con -X (como John V. sugirió) reveló lo siguiente:

[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) 

Respuesta

12

Dos pensamientos vienen a la mente:

  1. La estructura de ruta en su repositorio interno para su artefacto es incorrecto. Sugiero ejecutar el comando maven con el parámetro -X. Es mostrará el intento del maven en descargando los archivos. Obtenga la línea que tiene su repositorio como la url y pruébelo usted mismo.

    El camino debe ser similar

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

  2. que aún no ha incluya su repositorio como un repositorio en su pom. xml
+2

que no declaró el repositorio en el POM, sino más bien especificado en la configuración de Maven que nuestro repositorio era universal (*) espejo.¿No debería ser suficiente (ciertamente es suficiente para las versiones estables)? Agregar una declaración explícita al POM parece resolver el problema. – Kris

+0

Desafortunadamente no he trabajado demasiado con settings.xml para repositorios. Los incluí en un pom padre, por lo que cualquier desarrollador que comience de cero necesita preocuparse por el archivo settings.xml en caso de que el repositorio tenga que cambiar (lo que en realidad tiene para nosotros) –

+14

Creo que lo he razonado. Para compilaciones estables, Maven se ajustará por defecto a 'central', que mi configuración de espejo redirige a nuestro repositorio. Para las compilaciones SNAPSHOT no existe un valor por defecto (ya que central no las maneja) y en ausencia de un POM que especifique un repositorio (que * maneja * las compilaciones SNAPSHOT), simplemente fallará sin siquiera intentar buscarlo. – Kris

11

Normalmente, tiene una url de instantáneas separada de la URL de publicación. Solo diferentes rutas en el mismo repositorio, pero listadas como repositorios separados en el pom. El uno para instantáneas necesita tener activado instantáneas, y la otra para las liberaciones ha instantáneas deshabilitado:

<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

Esto funciona, aunque debe tener en cuenta que esto se encuentra en la sección de perfiles del archivo Maven settings.xml. – Kris

+0

Lo guardamos en nuestro archivo maestro/padre principal del que heredan todos nuestros proyectos. De esta forma, los desarrolladores no tienen que configurar esto en sus archivos settings.xml. Settings.xml es principalmente para cosas que son específicas de la máquina o del usuario, y todos los desarrolladores de un proyecto normalmente deberían usar el mismo repositorio. Si bien puede colocar repositorios en el archivo settings.xml, creo que sería un caso excepcional, y no la norma. – kevinmrohr

+0

Muy extraño, que puedo implementar instantáneas sin esto, pero no es posible descargar instantáneas desplegadas. La configuración del perfil funciona bien. – Betlista

Cuestiones relacionadas