Tenga en cuenta que el complemento quiere 'repoUrl', a pesar de la documentación que dice 'repositoryUrl'. ¡Puede volverte loco como a mí!
zakmck
los documentos ( maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html ) muestran parámetros xml (<repositoryUrl> ... </repositoryUrl>) y propiedades de usuario de la línea de comandos (mvn .. . -DrepoUrl = "..."). Este ejemplo en particular está en desuso, por lo que no se preocupe; ahora ahora es uniformemente RemoteRepositories (en ambos usos); pero tenga en cuenta que el parámetro "destino" es la propiedad del usuario "-Ddest = ..."; ej. => 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)
Para asegurarse de encontrar el dependency:getobjetivo, debe decirle explícitamente a maven que use la versión 2.1, es decir, debe usar el nombre completo del complemento, incluida la versión:
ACTUALIZACIÓN: con versiones anteriores de Maven (anteriores a 2.1), es posible ejecutar dependency:getnormalmente (sin usar el nombre y la versión totalmente calificados) forzando 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 <settings>elemento de su ~/.m2/settings.xmlarchivo:
<usePluginRegistry>true</usePluginRegistry>
2. Agregue el archivo ~/.m2/plugin-registry.xmlcon los siguientes contenidos:
Pero esto ya no parece funcionar con Maven 2.1 / 2.2. En realidad, de acuerdo con la Introducción al Registro de complementos , plugin-registry.xmlse han rediseñado las características del (para portabilidad) y el registro de complementos se encuentra actualmente en un estado semi inactivo 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 dependency:get).
Sí, y acabo de obtener la misma resolución usando dependencia: obtener objetivo. Dependencia mvn: get -Dartifact = org.apache.archiva: archiva-webapp: LATEST: war -DrepoUrl = repository.sonatype.org/content/repositories/central El único inconveniente es que debo proporcionar una opción de repoUrl. Su información realmente ayuda, estoy usando mvn 2.2.1 (rdebian-1) y no toqué el pluginRegistry. Gracias.
Xiè Jìléi
2
este objetivo de "obtener" parece "simplemente funcionar" nuevamente (no se requiere configuración / pirateo adicional; plugin 2.5.1, mvn 3.0.4): = ejemplo => 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
michael
¿Cuál es la diferencia entre obtener e instalar? ¿No van ambos a tu repositorio local de expertos? --editar: espera, no, lo entiendo ahora; la instalación es para que sus departamentos locales se copien en el repositorio local de m2, consígalos desde un control remoto.
(Gracias a Pascal Thivent por proporcionar su maravillosa respuesta en primer lugar. Estoy agregando otra respuesta, porque no cabe en un comentario y sería demasiado extensa para una edición).
Usé esto para descargar el arquetipo de maven. Esto funciona muy bien si está detrás del proxy y trabaja con eclipse que no puede registrarse para identificar los arquetipos de Maven aunque haya configurado el proxy en la configuración xml.
Acewin
mvn org.apache.maven.plugins: maven-dependency-plugin: 2.8: get -Dartifact = org.apache.maven.archetypes: maven-archetype-webapp: 1.0: jar
Acewin
¿Puedes explicar qué jar:sourcessignifica / hace? ¿Por qué necesita especificar "jar"? y "fuentes" significa que descargará dependencias adicionales que requiere el artefacto?
red888
"jar" es el tipo de empaque, "sources" es el clasificador. Dada una dependencia (por ejemplo, hibernate-core ), podría haber más de un artefacto. A menudo, hay: 1. la biblioteca solo binaria, 2. sources, un archivo JAR que contiene solo fuentes Java, 3. javadoc, un archivo JAR con documentos API solamente. Consulte también: Controladores de artefactos predeterminados de Maven .
Danilo Piazzalunga
Gracias por aclarar cómo usar [:classifier]correctamente, si tengo un archivo zip de Assemlby plugin creado que quiero descargar.
jonashackt
43
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 lo hicieron, principalmente debido a cambios en la versión de Maven, creo)
Esto realmente descarga el archivo y lo copia en el directorio de trabajo local
¡Muchas gracias! No necesité el evento -DrepoUrl, supongo que estaba implícito en mi pom de todos modos. También yo no uso -Ddest, ya que en realidad hizo falta que se descarga a la normal .m2directorio.
yair
15
El destparámetro está en desuso y se puede reemplazar con una invocación de copydespués de esta getmanera: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.(en este caso, colocar el jar en el directorio de trabajo).
Jacob Raihle
@JacobRaihle Entonces no puedo descargar el archivo sin pom.xml, consiguiendo el error siguiente: Goal requires a project to execute but there is no POM in this directory.
Athlan
2
El soporte de @Athlan No-pom puede ser una característica más nueva, supongo. Hoy en día solo puedo correr mvn dependency:copy(sin dependency:getprimero).
Jacob Raihle
26
Con respecto a cómo obtener el artefacto binario, la respuesta de Pascal Thivent es, pero también para obtener el jar de fuentes de artefactos, podemos usar:
Esto funciona porque el artifactparámetro en realidad consiste en groupId:artifactId:version[:packaging][:classifier]. Solo el embalaje y el clasificador son opcionales.
Con jarcomo embalaje ysources como clasificador , el plugin de dependencia experto entiende que estamos pidiendo el tarro de las fuentes, no el frasco artefacto.
Desafortunadamente, por ahora, los archivos jar de fuentes no se pueden descargar de forma transitiva, lo que tiene sentido, pero idealmente creo que también puede respetar la opción downloadSourcesal igual que lo hace el complemento eclipse de Maven.
Se podría usar la dependencia: copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ) que toma una lista de artefactos definidos en la sección de configuración del complemento y los copia en una ubicación específica , renombrándolos o quitando 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 podrían usarse en la CLI de Maven. Se podrían especificar las propiedades que tienen la propiedad "Propiedad del usuario:" definida. En el siguiente ejemplo, estoy descargando junit a mi carpeta temporal y quitando la vesion del archivo jar.
donde artefacto = junit: junit: 4.11 son las coordenadas de Maven. Y especifica artifcat como groupId: artifactId: version [: packaging [: clasificador]]
Use el comando "mvn dependency: get" para descargar un objeto específico y use el comando "mvn dependency: copy" para copiar el artefacto descargado en el directorio de destino "-DoutputDirectory"
Por lo general, instala el artefacto en su repositorio local, por lo que no debería necesitar descargarlo. Sin embargo, si desea compartir su artefacto con otras personas, deberá implementar el artefacto en un repositorio central. Vea el complemento de implementación para obtener más detalles.
Además, agregar una dependencia a su POM buscará automáticamente cualquier artefacto de terceros que necesite cuando cree su proyecto. Es decir, esto descargará el artefacto desde el repositorio central.
Respuestas:
Puede usar el complemento de dependencia de Maven que tiene un buen
dependency:get
objetivo desde la versión 2.1. No es necesario un pom, todo sucede en la línea de comando.Para asegurarse de encontrar el
dependency:get
objetivo, debe decirle explícitamente a maven que use la versión 2.1, es decir, debe usar el nombre completo del complemento, incluida la versión:ACTUALIZACIÓN: con versiones anteriores de Maven (anteriores a 2.1), es posible ejecutar
dependency:get
normalmente (sin usar el nombre y la versión totalmente calificados) forzando 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
<settings>
elemento de su~/.m2/settings.xml
archivo:2. Agregue el archivo
~/.m2/plugin-registry.xml
con los siguientes contenidos:Pero esto ya no parece funcionar con Maven 2.1 / 2.2. En realidad, de acuerdo con la Introducción al Registro de complementos ,
plugin-registry.xml
se han rediseñado las características del (para portabilidad) y el registro de complementos se encuentra actualmente en un estado semi inactivo 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ásdependency:get
).fuente
:jar:sources
el artefacto , consulte stackoverflow.com/a/31109185/537554mvn dependency:get -Dartifact=group-id:artefact-id:version
Con la última versión (2.8) del Complemento de dependencia de Maven , descargar un artefacto del Repositorio central de Maven es tan simple como:
donde
groupId:artifactId:version
, etc. son las coordenadas MavenUn ejemplo, probado con Maven 2.0.9, Maven 2.2.1 y Maven 3.0.4:
(Gracias a Pascal Thivent por proporcionar su maravillosa respuesta en primer lugar. Estoy agregando otra respuesta, porque no cabe en un comentario y sería demasiado extensa para una edición).
fuente
jar:sources
significa / hace? ¿Por qué necesita especificar "jar"? y "fuentes" significa que descargará dependencias adicionales que requiere el artefacto?sources
, un archivo JAR que contiene solo fuentes Java, 3.javadoc
, un archivo JAR con documentos API solamente. Consulte también: Controladores de artefactos predeterminados de Maven .[:classifier]
correctamente, si tengo un archivo zip de Assemlby plugin creado que quiero descargar.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 lo hicieron, principalmente debido a cambios en la versión de Maven, creo)
Esto realmente descarga el archivo y lo copia en el directorio de trabajo local
De bash:
fuente
-DrepoUrl
, supongo que estaba implícito en mi pom de todos modos. También yo no uso-Ddest
, ya que en realidad hizo falta que se descarga a la normal.m2
directorio.dest
parámetro está en desuso y se puede reemplazar con una invocación decopy
después de estaget
manera:mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.
(en este caso, colocar el jar en el directorio de trabajo).Goal requires a project to execute but there is no POM in this directory
.mvn dependency:copy
(sindependency:get
primero).Con respecto a cómo obtener el artefacto binario, la respuesta de Pascal Thivent es, pero también para obtener el jar de fuentes de artefactos, podemos usar:
p.ej
Esto funciona porque el
artifact
parámetro en realidad consiste engroupId:artifactId:version[:packaging][:classifier]
. Solo el embalaje y el clasificador son opcionales.Con
jar
como embalaje ysources
como clasificador , el plugin de dependencia experto entiende que estamos pidiendo el tarro de las fuentes, no el frasco artefacto.Desafortunadamente, por ahora, los archivos jar de fuentes no se pueden descargar de forma transitiva, lo que tiene sentido, pero idealmente creo que también puede respetar la opción
downloadSources
al igual que lo hace el complemento eclipse de Maven.fuente
Se podría usar la dependencia: copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ) que toma una lista de artefactos definidos en la sección de configuración del complemento y los copia en una ubicación específica , renombrándolos o quitando 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 podrían usarse en la CLI de Maven. Se podrían especificar las propiedades que tienen la propiedad "Propiedad del usuario:" definida. En el siguiente ejemplo, estoy descargando junit a mi carpeta temporal y quitando la vesion del archivo jar.
donde artefacto = junit: junit: 4.11 son las coordenadas de Maven. Y especifica artifcat como groupId: artifactId: version [: packaging [: clasificador]]
(Gracias a Pascal Thivent por proporcionar su https://stackoverflow.com/a/18632876/2509415 en primer lugar. Estoy agregando otra respuesta)
fuente
un trazador de líneas para descargar el último artefacto de maven sin mvn:
fuente
El uso de la documentación oficial:
Para mi caso, vea la respuesta a continuación:
Use el comando "mvn dependency: get" para descargar un objeto específico y use el comando "mvn dependency: copy" para copiar el artefacto descargado en el directorio de destino "-DoutputDirectory"
fuente
Aquí hay un ejemplo para obtener ASM-7 usando Maven 3.6:
O puede descargar el jar desde aquí: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm y luego
fuente
El comando:
Por lo general, instala el artefacto en su repositorio local, por lo que no debería necesitar descargarlo. Sin embargo, si desea compartir su artefacto con otras personas, deberá implementar el artefacto en un repositorio central. Vea el complemento de implementación para obtener más detalles.
Además, agregar una dependencia a su POM buscará automáticamente cualquier artefacto de terceros que necesite cuando cree su proyecto. Es decir, esto descargará el artefacto desde el repositorio central.
fuente
LATEST
está en desuso, intente con rango[,)
fuente