Usando Maven para descargar dependencias a un directorio en la línea de comando

Necesito descargar todas las dependencias transitivas de un proyecto a un directorio en la línea de comando sin tener un archivo pom.xml u otro script. Idealmente, podría hacer esto con uno o dos comandos. Por lo que puedo decir, este es al menos un proceso de 2 pasos con mvn.

  1. Descargar dependencias al repository local
  2. Copie las dependencias al directorio lib

Para obtener las dependencias que ejecuto

$ mvn org.apache.maven.plugins:maven-dependency-plugin:2.6:get -DgroupId=org.jclouds.provider -DartifactId=rackspace-cloudservers-us -Dversion=1.5.8 

Lo cual funciona genial Lamentablemente, el param no me sirve, ya que no pondrá todas las dependencias transitivas en el destino.

Así que ahora necesito copiar ese archivo JAR y todas sus dependencias transitivas en mi directorio lib. Sé que esta parte ha sido solicitada muchas veces en StackOverflow pero nada ha funcionado para mi todavía. He intentado lo siguiente.

 $ mvn dependency:copy-dependencies ... [ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.1:copy-dependencies (default-cli): Goal requires a project to execute but there is no POM in this directory 

y

 $ mvn dependency:copy ... [ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.1:copy (default-cli): Goal requires a project to execute but there is no POM in this directory 

Después de leer la documentación y otras respuestas aquí en StackOverflow para copiar-dependencias y copiar, pensé que podría usarlas desde la línea de comandos sin un pom.xml pero mvn parece necesitar uno. La versión de Mi Maven es Apache Maven 3.0.4 (r1232337; 2012-01-17 02: 44: 56-0600).

¿Alguien puede darme un ejemplo de copiar dependencias transitivas usando mvn sin un pom.xml?

¿Hay alguna manera mejor de hacer lo que estoy intentando lograr aquí?

El primer comando casi te consigue lo que necesitas: el POM de la dependencia en cuestión. Una vez que tenga eso, no debería necesitar otro POM de proyecto para ejecutar copy:dependencies :

Aquí hay un ejemplo:

 mvn org.apache.maven.plugins:maven-dependency-plugin:2.7:get -DgroupId=org.jclouds.provider -DartifactId=rackspace-cloudservers-us -Dversion=1.5.8 -Dtype=pom mvn org.apache.maven.plugins:maven-dependency-plugin:2.7:copy-dependencies -f /path/to/m2/repo/org/jclouds/provider/rackspace-cloudservers-us/1.5.8/rackspace-cloudservers-us-1.5.8.pom -DoutputDirectory=/path/to/target/dir/don't/use/. 

Como señaló Everett Toews , puede usar opciones adicionales de copy:dependencies para refinar aún más lo que se descargó, por ejemplo, agregando -DexcludeTypes=test-jar para filtrar los -DexcludeTypes=test-jar de prueba.

Apache ivy se puede ejecutar como un jar independiente para descargar dependencias de Maven. No se requiere POM.

 curl -L -O http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.3.0/ivy-2.3.0.jar java -jar ivy-2.3.0.jar -dependency org.jclouds.provider rackspace-cloudservers-us 1.5.8 -retrieve "lib/[artifact]-[revision](-[classifier]).[ext]" 

Produce los siguientes archivos:

 ├── ivy-2.3.0.jar └── lib ├── aopalliance-1.0.jar ├── asm-3.1.jar ├── bcprov-jdk16-1.46.jar ├── cglib-2.2.1-v20090111.jar ├── clojure-1.3.0.jar ├── core.incubator-0.1.0.jar ├── gson-2.2.jar ├── guava-13.0.jar ├── guice-3.0.jar ├── guice-assistedinject-3.0.jar ├── javax.inject-1.jar ├── jclouds-compute-1.5.8.jar ├── jclouds-core-1.5.8.jar ├── jclouds-scriptbuilder-1.5.8.jar ├── jsr250-api-1.0.jar ├── jsr311-api-1.1.1.jar ├── openstack-keystone-1.5.8.jar ├── openstack-nova-1.5.8.jar ├── rackspace-cloudidentity-1.5.8.jar ├── rackspace-cloudservers-us-1.5.8.jar ├── rackspace-cloudservers-us-1.5.8-javadoc.jar ├── rackspace-cloudservers-us-1.5.8-sources.jar ├── rocoto-6.1.jar └── tools.logging-0.2.3.jar 

Según mi entender, desea descargar todos los artefactos de dependencias a una carpeta en su computadora local (sin buscar en su repository local). La forma más sencilla de hacerlo es crear un simple pom.xml ( sí, crea el pom ) que creará el archivo WAR y dependerá de tu artefacto. Después del mvn clean package , encontrará todos los artefactos de dependencias (incluidos transitivos) en la carpeta lib de WAR.

  4.0.0 testwar examplewar war 1.0-SNAPSHOT examplewar Maven Webapp   org.jclouds.provider rackspace-cloudservers-us 1.5.8