web-dev-qa-db-fra.com

Comment puis-je télécharger un artefact Maven spécifique dans une ligne de commande?

Je peux installer un artefact avec install:install-file, .__, mais comment puis-je télécharger un artefact?

Par exemple: 

mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
130
Xiè Jìléi

Vous pouvez utiliser le plugin maven dependency qui a un Nice dependency:get goal depuis la version 2.1. Pas besoin de pom, tout se passe en ligne de commande.

Pour être sûr de trouver l’objectif dependency:get, vous devez explicitement indiquer à maven d’utiliser la version 2.1, c’est-à-dire le nom complet du plug-in, y compris la version: 

mvn org.Apache.maven.plugins:maven-dependency-plugin:2.1:get \
    -DrepoUrl=url \
    -Dartifact=groupId:artifactId:version

UPDATE: Avec les anciennes versions de Maven (antérieures à 2.1), il est possible d'exécuter dependency:get normalement (sans utiliser le nom complet et la version) en forçant votre copie de maven à utiliser une version donnée d'un plugin. 

Cela peut être fait comme suit:

1. Ajoutez la ligne suivante dans l'élément <settings> de votre fichier ~/.m2/settings.xml: 

<usePluginRegistry>true</usePluginRegistry>

2. Ajoutez le fichier ~/.m2/plugin-registry.xml avec le contenu suivant:

<?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>

Mais cela ne semble plus fonctionner avec Maven 2.1/2.2. En fait, conformément à Introduction au registre de plug-in , les fonctionnalités du plugin-registry.xml ont été remodelées (pour la portabilité) et le le registre du plug-in est actuellement à l'état semi-dormant dans Maven 2. Je pense donc que nous devons utiliser le nom long pour le moment (lors de l’utilisation du plugin sans pom, ce qui est l’idée derrière dependency:get).

143
Pascal Thivent

Avec la dernière version (2.8) du plug-in Maven Dependency , le téléchargement d'un artefact depuis le référentiel central Maven est aussi simple que:

mvn org.Apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]]

groupId:artifactId:version, etc. sont les coordonnées Maven

Un exemple, testé avec Maven 2.0.9, Maven 2.2.1 et 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

(Merci à Pascal Thivent pour sa merveilleuse réponse en premier lieu. J'ajoute une autre réponse, car cela ne rentrerait pas dans un commentaire et ce serait trop volumineux pour un montage.)

77
Danilo Piazzalunga

Voici ce qui a fonctionné pour moi pour télécharger la dernière version d'un artefact appelé "composant.jar" avec Maven 3.1.1 à la fin.

Cela télécharge le fichier et le copie dans le répertoire de travail local.

De bash:

mvn dependency:get \
    -DrepoUrl=http://.../ \
        -Dartifact=com.foo.something:component:LATEST:jar \
        -Dtransitive=false \
        -Ddest=component.jar \
28
verveguy

En ce qui concerne l'obtention du fichier binaire de l'artefact, La réponse de Pascal Thivent est-ce, mais pour obtenir également le fichier jar des sources d'artefact, nous pouvons utiliser:

mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources

par exemple.

mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources

Cela fonctionne parce que le paramètre artifact consiste en réalité en groupId:artifactId:version[:packaging][:classifier]. Seuls packaging et classifier sont facultatifs.

Avec jar comme packaging et sources comme classifier, le plug-in maven dependency comprend que nous demandons le fichier sources, et non le fichier artefact. 

Malheureusement pour l'instant, les fichiers jar des sources ne peuvent pas être téléchargés de manière transitoire, ce qui est logique, mais je pense qu'il est également possible de respecter l'option downloadSources, tout comme le plugin maven Eclipse.

17
ryenus

une doublure pour télécharger le dernier artefact Maven sans 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"
9
mrduguo

Dépendance pourrait être utilisée: copy ( http://maven.Apache.org/plugins/maven-dependency-plugin/copy-mojo.html ) qui prend une liste des artefacts définis dans la section de configuration du plugin et les copie à un emplacement spécifié, en les renommant ou en supprimant la version si vous le souhaitez. Cet objectif peut résoudre les artefacts des référentiels distants s’ils n’existent ni dans le référentiel local ni dans le réacteur.

Toutes les propriétés du plug-in ne peuvent pas être utilisées dans maven CLI. Les propriétés pour lesquelles la propriété "User Property:" a été définie peuvent être spécifiées. Dans l'exemple ci-dessous, je télécharge junit dans mon dossier temporaire et extrait la version du fichier jar.

mvn org.Apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true

où artefact = junit: junit: 4.11 est les coordonnées maven. Et vous spécifiez artifcat comme étant groupId: artifactId: version [: packaging [: classifier]]

(Merci à Pascal Thivent d’avoir fourni sa https://stackoverflow.com/a/18632876/2509415 au début. J'ajoute une autre réponse.)

7
aloksahoo

LATEST est obsolète, essayez avec la plage [,)

./mvnw org.Apache.maven.plugins:maven-dependency-plugin:3.1.1:get \  
-DremoteRepositories=repoId::default::https://nexus/repository/maven-releases/ \
"-Dartifact=com.acme:foo:[,)"
0
MariuszS

La commande:

mvn install:install-file 

Généralement installe l’artefact dans votre référentiel local, vous n’aurez donc pas besoin de le télécharger. Toutefois, si vous souhaitez partager votre artefact avec d'autres personnes, vous devrez le déployer dans un référentiel central. Pour plus d'informations, reportez-vous à la section deploy plugin .

En outre, l’ajout de dependency à votre POM extraira automatiquement les artefacts tiers dont vous avez besoin lors de la construction de votre projet. C'est à dire. Cela téléchargera l'artefact à partir du référentiel central.

0
Clinton

Voici un exemple pour obtenir ASM-7 à l'aide de Maven 3.6:

mvn dependency:get -DremoteRepositories=maven.Apache.org -Dartifact=org.ow2.asm:7.0:sources:jar

Ou vous pouvez télécharger le pot à partir d'ici: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm puis

mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar
0
Adobe