java - tutorial - Usando Maven para descargar dependencias a un directorio en la línea de comando
maven no descarga dependencias (3)
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.
- Descargar dependencias al repositorio local
- 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í?
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
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ó , 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.
Según mi entender, desea descargar todos los artefactos de dependencias a una carpeta en su computadora local (sin buscar en su repositorio 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.
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>testwar</groupId>
<artifactId>examplewar</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>examplewar Maven Webapp</name>
<dependencies>
<dependency>
<groupId>org.jclouds.provider</groupId>
<artifactId>rackspace-cloudservers-us</artifactId>
<version>1.5.8</version>
</dependency>
</dependencies>
</project>