¿Una línea de comando simple para descargar un artefacto maven2 remoto al repositorio local?

122

Tengo una biblioteca que distribuyo usando maven 2. El usuario típico de esta biblioteca no usa maven para construir sus aplicaciones, pero probablemente esté algo familiarizado con maven y probablemente lo tenga instalado.

Me gustaría documentar un comando "simple" de una línea que puedan usar para descargar los artefactos de mi biblioteca a su local ~/.m2/repositorysin requerir que configuren un pom.xml para hacerlo.

Pensé que había una manera de hacer esto, pero parece que no puedo encontrarlo después de revisar la documentación del complemento install:install-filey dependency. Probé cosas como:

mvn install:install-file -DrepositoryId=java.net -Durl=http://download.java.net/maven/2/ -Dfile=robo-guice-0.4-20091121.174618-1.jar -DpomFile=robo-guice-0.4-20091121.174618-1.pom -DgroupId=robo-guice -DartifactId=robo-guice -Dversion=0.4-SNAPSHOT -Dpackaging=jar

pero creo que me estoy equivocando de árbol, ya que parece que el complemento de instalación se usa para copiar archivos construidos localmente en el repositorio local, en lugar de descargar artefactos remotos en el repositorio local.

Este es el artefacto que me gustaría instalar: http://download.java.net/maven/2/robo-guice/robo-guice/0.4-SNAPSHOT/

¿Es esto posible usando maven?

emmby
fuente

Respuestas:

168

Desde la versión 2.1 del complemento de dependencia de Maven , existe una dependencia: obtener objetivo para este propósito. Para asegurarse de que está utilizando la versión correcta del complemento, deberá utilizar el "nombre completo":

mvn org.apache.maven.plugins: maven-dependency-plugin: 2.1: get \
    -DrepoUrl = http: //download.java.net/maven/2/ \
    -Dartifact = robo-guice: robo-guice: 0.4-SNAPSHOT
Pascal Thivent
fuente
Muy útil para mostrar cómo instalar el complemento de dependencia.
Sergio Acosta
2
Pascal, ¿puedes decirme cómo definir usuario + contraseña para llegar al repositorio? El truco con el usuario: contraseña @ repourl no funcionó.
Gábor Lipták
4
el objetivo es bueno, pero ¿cómo puedo definir el directorio de destino donde quiero que se copie el archivo? (y nombre de archivo)
domi
9
@domi (respuesta tardía para la posteridad): use "-Ddest = path / to / my.jar"; de lo contrario, simplemente se copia en su repositorio local ~ / .m2 / (hace que parezca que no pasó nada). Consulte maven.apache.org/plugins/maven-dependency-plugin/… = example => mvn org.apache.maven.plugins: maven-dependency-plugin: 2.5.1: get -DremoteRepositories = repo.maven.apache.org -Dartifact = org.apache.ant: ant: 1.8.1 -Ddest = ant-1.8.1.jar (resultado: ant-1.8.1.jar en el directorio actual)
michael
3
¡Gracias! Mientras que, en el enlace del documento que publicó, hay Deprecated. Use remoteRepositoriespara repoUrl. Actualice la respuesta tal vez :)
Fin de semana
46

Dales un pom trivial con estos frascos enumerados como dependencias e instrucciones para ejecutar:

mvn dependency:go-offline

Esto atraerá las dependencias al repositorio local.

Una solución más directa es la dependencia: obtener , pero hay muchos argumentos para escribir:

mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version
bmargulies
fuente
Buena idea, aunque una línea de comando que pudieran copiar y pegar sería más fácil
emmby
Si pudiera pensar en uno, lo publicaría. No conozco ningún complemento que haga exactamente lo que se necesita. Sé cómo escribir uno ...
bmargulies
El getmojo espera -DrepoUrlestar presente, no -DrepositoryUrl. En cuanto a los argumentos a escribir, no hay magia, es necesario que proporciones esta información de una forma u otra.
Pascal Thivent
En mi primer esquema, el usuario final escribe solo tres caracteres: mvn. El resto de la escritura la realiza el operador.
bmargulies
22

A partir de la versión 2.4 del complemento de dependencia de Maven , también puede definir un destino de destino para el artefacto utilizando la marca -Ddest. Debe apuntar a un nombre de archivo (no a un directorio) para el artefacto de destino. Consulte la página de parámetros para conocer los parámetros adicionales que se pueden utilizar

mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get \
    -DremoteRepositories=http://download.java.net/maven/2 \
    -Dartifact=robo-guice:robo-guice:0.4-SNAPSHOT \
    -Ddest=c:\temp\robo-guice.jar
Eric B.
fuente
2
¡Gracias! -Ddest está marcado como obsoleto. ¿Hay una nueva solución nueva?
Dimath
1
Utilice la dependencia: copie el objetivo en su lugar. maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html
Eric B.
3
el objetivo de copia no copia deps transitivas.
Renato