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