Puedo instalar un artefacto install:install-file
, pero ¿cómo puedo descargar un artefacto?
Por ejemplo:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Puedo instalar un artefacto install:install-file
, pero ¿cómo puedo descargar un artefacto?
Por ejemplo:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
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:
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 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:
<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 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ás dependency:get
).
:jar:sources
el artefacto , consulte stackoverflow.com/a/31109185/537554
mvn 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:
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 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 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).
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:
mvn dependency:get \
-DrepoUrl=http://.../ \
-Dartifact=com.foo.something:component:LATEST:jar \
-Dtransitive=false \
-Ddest=component.jar \
-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 de copy
después de esta get
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
(sin dependency: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:
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 artifact
parámetro en realidad consiste en groupId: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.
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.
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 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)
un trazador de líneas para descargar el último artefacto de maven 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"
El uso de la documentación oficial:
https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency:get
Para mi caso, vea la respuesta a continuación:
mvn dependency:get -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false
mvn dependency:copy -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false -DoutputDirectory=$6
#mvn dependency:get -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false
#mvn dependency:copy -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false -DoutputDirectory=.
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"
Aquí hay un ejemplo para obtener ASM-7 usando Maven 3.6:
mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar
O puede descargar el jar desde aquí: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm y luego
mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar
El comando:
mvn install:install-file
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.