Maven: utiliza un repository remoto también como repository local

He buscado un día integer para encontrar una solución, pero hasta ahora nada funciona.

Problema: tengo dos proyectos Foo y Commons usando Maven. Foo depende de los Comunes. Commons se implementa a través de scp en un repository remoto en un server. El mismo server también verifica Foo y lo construye. Pero cuando el server intenta build Foo, intenta acceder al Commons Jar remotamente (a través de scp) y se produce un error:

No se pudo transferir metadata groupId: commons: 0.0.1-SNAPSHOT / maven-metadata.xml from / to my-repository (scp: //server/.m2/repository): No se puede conectar. Motivo: SSH_MSG_DISCONNECT: 2 Demasiadas fallas de authentication para el usuario

Editar: Implementar Commons en el server funciona. Envasado localmente Foo también funciona. Estoy usando Maven 3.0.5 en el server.

Lo que he intentado hasta ahora:

  • Declarando el repository local en Foo 's pom.xml
  • Declarando org.apache.maven.wagon:wagon-file:2.6 como una extensión en Foo 's pom.xml
  • Cambiando la versión de Commons de 0.0.1-SNAPSHOT a 0.0.1-RELEASE

Antecedentes: Project Commons es utilizado por otros proyectos y varias personas trabajan en estos proyectos. Estas personas no deberían tener que consultar el Proyecto Commons, sino que siempre deberían tener acceso al contenedor Commons más actualizado.

settings.xml en ~ / .m2 /:

  ... <servers> <server> <id>my-repository</id> <username>user</username> <password>password</password> </server> </servers> ... 

Pom.xml de Common:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>groupId</groupId> <artifactId>commons</artifactId> <version>0.0.1-SNAPSHOT</version> <name>commons</name> <distributionManagement> <repository> <id>my-repository</id> <url>scp://server/.m2/repository</url> </repository> </distributionManagement> <build> ... <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ssh</artifactId> <version>2.6</version> </extension> </extensions> </build> <dependencies> ... </dependencies> </project> 

Foo's pom.xml:

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>groupId</groupId> <artifactId>foo</artifactId> <packaging>jar</packaging> <version>1.0</version> <repositories> <repository> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> <id>my-repository</id> <url>scp://server/.m2/repository</url> </repository> </repositories> ... </project> 

Para que funcione, tuve que agregar un espejo para el repository del server en .m2/settings.xml del server. <mirrorOf> tiene que ser el mismo <id> del repository definido en pom.xml .

server: ~ / .m2 / settings.xml:

  ... <mirrors> ... <mirror> <id>local-mirror</id> <mirrorOf>my-repository</mirrorOf> <url>file://${user.home}/.m2/repository</url> </mirror> </mirrors> ... 

Fuente: http://maven.apache.org/guides/mini/guide-mirror-settings.html