maven-2 - descarga - maven tutorial
¿Cómo puedo descargar un artefacto Maven específico en una línea de comando? (7)
Puedo instalar un artefacto por instalación: instalar-archivo, pero ¿cómo puedo descargarlo, por ejemplo:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
¿alguna idea?
Con la última versión (2.8) del Complemento Dependency de Maven , la descarga de un artefacto del Repositorio Central de Maven es tan simple como:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]]
donde groupId:artifactId:version
, etc. son las coordenadas de Maven
Un ejemplo, probado con Maven 2.0.9, Maven 2.2.1 y Maven 3.0.4:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=org.hibernate:hibernate-entitymanager:3.4.0.GA:jar:sources
(Gracias a Pascal Thivent por brindarme su maravillosa respuesta en primer lugar. Estoy agregando otra respuesta, porque no encajaría en un comentario y sería demasiado extensa para una edición).
El comando:
mvn install:install-file
Por lo general, installs el artefacto en su repositorio local, por lo que no debería necesitar descargarlo. Sin embargo, si desea compartir su artefacto con otros, deberá desplegar el artefacto en un repositorio central; consulte el complemento de implementación para obtener más detalles.
Además, al agregar una dependency a su POM, se buscarán automáticamente los artefactos de terceros que necesite al construir su proyecto. Es decir, esto descargará el artefacto del repositorio central.
En cuanto a cómo obtener el artefacto binario, la respuesta de Pascal Thivent lo es, pero para obtener también el jarrón de fuentes de artefactos, podemos usar:
mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources
p.ej
mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources
Esto funciona porque el parámetro artifact
realidad consiste en groupId:artifactId:version[:packaging][:classifier]
. Solo el empaque y el clasificador son opcionales.
Con jar
como empaquetamiento y sources
como clasificador , el complemento de dependencia maven entiende que estamos pidiendo el contenedor de fuentes, no el contenedor de artefactos.
Desafortunadamente, por ahora, los archivos jar no se pueden descargar de forma transitiva, lo cual tiene sentido, pero idealmente creo que también puede respetar la opción downloadSources
tal como lo hace el plugin maven eclipse.
Esto es lo que funcionó para mí para descargar la última versión de un artefacto llamado "component.jar" con Maven 3.1.1 al final (otras sugerencias no, principalmente debido a los cambios de versión de Maven, creo)
Esto realmente descarga el archivo y lo copia en el directorio de trabajo local
De bash:
mvn dependency:get /
-DrepoUrl=http://.../ /
-Dartifact=com.foo.something:component:LATEST:jar /
-Dtransitive=false /
-Ddest=component.jar /
Podría usar el complemento de dependencia maven que tiene una buena dependency:get
objetivo desde la versión 2.1. No hay necesidad de un pom, todo sucede en la línea de comando.
Para asegurarse de encontrar la dependency:get
objetivo, debe indicar explícitamente a maven que use la versión 2.1, es decir, debe usar el nombre completo del complemento, incluida la versión:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get /
-DrepoUrl=url /
-Dartifact=groupId:artifactId:version
ACTUALIZACIÓN: con versiones anteriores de Maven (anteriores a 2.1), es posible ejecutar la dependency:get
normalmente (sin utilizar el nombre completo y la versión) forzando a su copia de maven a usar una versión dada de un complemento.
Esto puede hacerse de la siguiente manera:
1. Agregue la siguiente línea dentro del elemento <settings>
de su archivo ~/.m2/settings.xml
:
<usePluginRegistry>true</usePluginRegistry>
2. Agregue el archivo ~/.m2/plugin-registry.xml
con los siguientes contenidos:
<?xml version="1.0" encoding="UTF-8"?>
<pluginRegistry xsi:schemaLocation="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0 http://maven.apache.org/xsd/plugin-registry-1.0.0.xsd"
xmlns="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<useVersion>2.1</useVersion>
<rejectedVersions/>
</plugin>
</plugins>
</pluginRegistry>
Pero esto parece no funcionar más con maven 2.1 / 2.2. De hecho, de acuerdo con el Registro de Introducción al Plugin , las características del plugin-registry.xml
han sido rediseñadas (para la portabilidad) y el registro de plugins se encuentra actualmente en un estado semi-latente dentro de Maven 2 . Así que creo que tenemos que usar el nombre largo por ahora (cuando se usa el complemento sin un pom, que es la idea detrás de la dependency:get
).
Se podría usar la dependencia: copy ( copy ) que toma una lista de los artefactos definidos en la sección de configuración del complemento y los copia en una ubicación especificada , cambiarles el nombre o eliminar la versión si lo desea. Este objetivo puede resolver los artefactos de repositorios remotos si no existen en el repositorio local o en el reactor.
No todas las propiedades del complemento se pueden usar en maven CLI. Se podrían especificar las propiedades que tienen definida la propiedad "Propiedad del usuario:". En el ejemplo siguiente, estoy descargando junit en mi carpeta temporal y eliminando la vesion del archivo jar.
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true
donde artefacto = junit: junit: 4.11 son las coordenadas maven. Y especifica artifcat como groupId: artifactId: version [: packaging [: clasificador]]
(Gracias a Pascal Thivent por proporcionarme su https://.com/a/18632876/2509415 en primer lugar. Estoy agregando otra respuesta)
un trazador de líneas para descargar el último artefacto experto sin mvn:
curl -O -J -L "https://repository.sonatype.org/service/local/artifact/maven/content?r=central-proxy&g=io.staticcdn.sdk&a=staticcdn-sdk-standalone-optimizer&e=zip&v=LATEST"