Attention, le plugin veut 'repoUrl', malgré la documentation disant 'repositoryUrl'. Cela peut vous rendre fou comme pour moi!
zakmck
la documentation ( maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html ) montre à la fois les paramètres xml (<repositoryUrl> ... </repositoryUrl>) et les propriétés utilisateur en ligne de commande (mvn .. . -DrepoUrl = "..."). Cet exemple particulier est obsolète, donc pas de soucis; maintenant il est maintenant uniformément remoteRepositories (dans les deux usages); mais notez que le paramètre "destination" est la propriété de l'utilisateur "-Ddest = ..."; par exemple => 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 (résultat: ant-1.8.1.jar dans le répertoire courant)
michael
Réponses:
182
Vous pouvez utiliser le plugin de dépendance maven qui a un bel dependency:getobjectif depuis la version 2.1. Pas besoin de pom, tout se passe sur la ligne de commande.
Pour être sûr de trouver l' dependency:getobjectif, vous devez explicitement dire à maven d'utiliser la version 2.1, c'est-à-dire que vous devez utiliser le nom complet du plugin, y compris la version:
MISE À JOUR: Avec les anciennes versions de Maven (antérieures à 2.1), il est possible de s'exécuter dependency:getnormalement (sans utiliser le nom et la version complets) 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' <settings>élément de votre ~/.m2/settings.xmlfichier:
<usePluginRegistry>true</usePluginRegistry>
2. Ajoutez le fichier ~/.m2/plugin-registry.xmlavec le contenu suivant:
Mais cela ne semble plus fonctionner avec maven 2.1 / 2.2. En fait, selon l' introduction au registre des plugins , les fonctionnalités du plugin-registry.xmlont été repensées (pour la portabilité) et le registre des plugins est actuellement dans un état semi-dormant dans Maven 2 . Je pense donc que nous devons utiliser le nom long pour le moment (lorsque vous utilisez le plugin sans pom, ce qui est l'idée derrière dependency:get).
Oui, et j'ai juste la même résolution en utilisant la dépendance: obtenir un objectif. mvn dependency: get -Dartifact = org.apache.archiva: archiva-webapp: LATEST: war -DrepoUrl = repository.sonatype.org/content/repositories/central Le seul inconvénient est que je dois fournir une option repoUrl. Vos informations sont vraiment utiles, j'utilise mvn 2.2.1 (rdebian-1) et je n'ai pas touché au pluginRegistry. Merci.
Xiè Jìléi
2
cet objectif "get" semble "juste fonctionner" à nouveau (aucune configuration / piratage supplémentaire requis; plugin 2.5.1, mvn 3.0.4): = example => 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
Quelle est la différence entre obtenir et installer? Ne vont-ils pas tous les deux aller à votre repo local Maven? --edit: attendez, non, je comprends maintenant; install est pour que vos deps locaux soient copiés dans le repo m2 local, récupérez-les à partir d'une télécommande.
Avec les versions plus récentes de Maven (par exemple 3.6.0), vous pouvez toujours le faire avec justemvn dependency:get -Dartifact=group-id:artefact-id:version
scrutari
93
Avec la dernière version (2.8) du plugin de dépendance Maven , télécharger un artefact depuis le référentiel central Maven est aussi simple que:
(Merci à Pascal Thivent d'avoir fourni sa merveilleuse réponse en premier lieu. J'ajoute une autre réponse, car elle ne rentrerait pas dans un commentaire et serait trop longue pour une modification.)
Je l'ai utilisé pour télécharger l'archétype maven. Cela fonctionne très bien si vous êtes derrière un proxy et que vous travaillez avec eclipse qui ne parvient pas à s'enregistrer pour identifier les archtypes maven même si vous avez configuré le proxy dans les paramètres xml.
Acewin le
mvn org.apache.maven.plugins: maven-dependency-plugin: 2.8: get -Dartifact = org.apache.maven.archetypes: maven-archetype-webapp: 1.0: jar
Acewin
Pouvez-vous expliquer ce que jar:sourcessignifie / fait? pourquoi avez-vous besoin de spécifier "jar"? et est-ce que «sources» signifie qu'il téléchargera des dépendances supplémentaires dont l'artefact a besoin?
red888
"jar" est le type d'emballage, "sources" est le classificateur. Étant donné une dépendance (par exemple, hibernate-core ), il peut y avoir plus d'un artefact. Souvent, il y a: 1. la bibliothèque binaire uniquement, 2. sources, un fichier JAR contenant uniquement des sources Java, 3. javadoc, un fichier JAR avec des documents API uniquement. Voir aussi: Gestionnaires d'artefacts par défaut Maven .
Danilo Piazzalunga
Merci de clarifier comment utiliser le [:classifier]correctement, si j'ai un fichier zip créé par un plugin assemlby que je veux télécharger.
jonashackt le
43
Voici ce qui a fonctionné pour moi pour télécharger la dernière version d'un artefact appelé "component.jar" avec Maven 3.1.1 à la fin (d'autres suggestions n'ont pas fonctionné, principalement en raison des changements de version de maven, je crois)
Cela télécharge le fichier et le copie dans le répertoire de travail local
Grand merci! Je n'ai pas eu besoin de l'événement -DrepoUrl, je suppose que c'était implicite de toute façon de mon pom. Aussi je n'ai pas utilisé -Ddestcomme je l' ai fait fait défaut à ce télécharger le régulier .m2répertoire.
yair
15
Le destparamètre est obsolète , et peut être remplacé par une invocation de copyafter getcomme ceci: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.(dans ce cas, placer le fichier jar dans le répertoire de travail).
Jacob Raihle
@JacobRaihle Je ne peux alors pas télécharger le fichier sans pom.xml, obtenir l'erreur suivante: Goal requires a project to execute but there is no POM in this directory.
Athlan
2
Le support @Athlan No-pom est peut-être une fonctionnalité plus récente, je suppose. De nos jours, je peux simplement courir mvn dependency:copy(sans d' dependency:getabord).
Jacob Raihle
26
Concernant la façon d'obtenir le binaire de l'artefact, la réponse de Pascal Thivent est la suivante, mais pour obtenir également le jar des sources d'artefact, nous pouvons utiliser:
Cela fonctionne car le artifactparamètre se compose en fait de groupId:artifactId:version[:packaging][:classifier]. Seuls l' emballage et le classificateur sont facultatifs.
Avec jarcomme empaquetage et sourcescomme classificateur , le plugin de dépendance maven comprend que nous demandons le jar des sources, pas le jar de l'artefact.
Malheureusement pour le moment, les fichiers jar sources ne peuvent pas être téléchargés de manière transitoire, ce qui est logique, mais idéalement, je pense qu'il peut également respecter l'option, downloadSourcestout comme le fait le plugin maven eclipse.
On pourrait utiliser dependency: copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ) qui prend une liste d'artefacts définis dans la section de configuration du plugin et les copie dans 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 plugin ne peuvent pas être utilisées dans maven CLI. Les propriétés dont la propriété "Propriété utilisateur:" est définie peuvent être spécifiées. Dans l'exemple ci-dessous, je télécharge junit dans mon dossier temporaire et supprime la vesion du fichier jar.
Utilisez la commande "mvn dependency: get" pour télécharger un aritfact spécifique et utilisez la commande "mvn dependency: copy" pour copier l'artefact téléchargé dans le répertoire dest "-DoutputDirectory"
En règle générale installe l'artefact dans votre dépôt local, de sorte que vous ne devriez pas avoir à le télécharger. Cependant, si vous souhaitez partager votre artefact avec d'autres, vous devrez déployer l'artefact dans un référentiel central, voir le plugin de déploiement pour plus de détails.
De plus, l'ajout d'une dépendance à votre POM récupérera automatiquement tous les artefacts tiers dont vous avez besoin lorsque vous générez votre projet. Ie Cela téléchargera l'artefact depuis le référentiel central.
Réponses:
Vous pouvez utiliser le plugin de dépendance maven qui a un bel
dependency:get
objectif depuis la version 2.1. Pas besoin de pom, tout se passe sur la ligne de commande.Pour être sûr de trouver l'
dependency:get
objectif, vous devez explicitement dire à maven d'utiliser la version 2.1, c'est-à-dire que vous devez utiliser le nom complet du plugin, y compris la version:MISE À JOUR: Avec les anciennes versions de Maven (antérieures à 2.1), il est possible de s'exécuter
dependency:get
normalement (sans utiliser le nom et la version complets) 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'
<settings>
élément de votre~/.m2/settings.xml
fichier:2. Ajoutez le fichier
~/.m2/plugin-registry.xml
avec le contenu suivant:Mais cela ne semble plus fonctionner avec maven 2.1 / 2.2. En fait, selon l' introduction au registre des plugins , les fonctionnalités du
plugin-registry.xml
ont été repensées (pour la portabilité) et le registre des plugins est actuellement dans un état semi-dormant dans Maven 2 . Je pense donc que nous devons utiliser le nom long pour le moment (lorsque vous utilisez le plugin sans pom, ce qui est l'idée derrièredependency:get
).la source
:jar:sources
à l' artefact , voir stackoverflow.com/a/31109185/537554mvn dependency:get -Dartifact=group-id:artefact-id:version
Avec la dernière version (2.8) du plugin de dépendance Maven , télécharger un artefact depuis le référentiel central Maven est aussi simple que:
où
groupId:artifactId:version
, etc. sont les coordonnées MavenUn exemple, testé avec Maven 2.0.9, Maven 2.2.1 et Maven 3.0.4:
(Merci à Pascal Thivent d'avoir fourni sa merveilleuse réponse en premier lieu. J'ajoute une autre réponse, car elle ne rentrerait pas dans un commentaire et serait trop longue pour une modification.)
la source
jar:sources
signifie / fait? pourquoi avez-vous besoin de spécifier "jar"? et est-ce que «sources» signifie qu'il téléchargera des dépendances supplémentaires dont l'artefact a besoin?sources
, un fichier JAR contenant uniquement des sources Java, 3.javadoc
, un fichier JAR avec des documents API uniquement. Voir aussi: Gestionnaires d'artefacts par défaut Maven .[:classifier]
correctement, si j'ai un fichier zip créé par un plugin assemlby que je veux télécharger.Voici ce qui a fonctionné pour moi pour télécharger la dernière version d'un artefact appelé "component.jar" avec Maven 3.1.1 à la fin (d'autres suggestions n'ont pas fonctionné, principalement en raison des changements de version de maven, je crois)
Cela télécharge le fichier et le copie dans le répertoire de travail local
De bash:
la source
-DrepoUrl
, je suppose que c'était implicite de toute façon de mon pom. Aussi je n'ai pas utilisé-Ddest
comme je l' ai fait fait défaut à ce télécharger le régulier.m2
répertoire.dest
paramètre est obsolète , et peut être remplacé par une invocation decopy
afterget
comme ceci:mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.
(dans ce cas, placer le fichier jar dans le répertoire de travail).Goal requires a project to execute but there is no POM in this directory
.mvn dependency:copy
(sans d'dependency:get
abord).Concernant la façon d'obtenir le binaire de l'artefact, la réponse de Pascal Thivent est la suivante, mais pour obtenir également le jar des sources d'artefact, nous pouvons utiliser:
par exemple
Cela fonctionne car le
artifact
paramètre se compose en fait degroupId:artifactId:version[:packaging][:classifier]
. Seuls l' emballage et le classificateur sont facultatifs.Avec
jar
comme empaquetage etsources
comme classificateur , le plugin de dépendance maven comprend que nous demandons le jar des sources, pas le jar de l'artefact.Malheureusement pour le moment, les fichiers jar sources ne peuvent pas être téléchargés de manière transitoire, ce qui est logique, mais idéalement, je pense qu'il peut également respecter l'option,
downloadSources
tout comme le fait le plugin maven eclipse.la source
On pourrait utiliser dependency: copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ) qui prend une liste d'artefacts définis dans la section de configuration du plugin et les copie dans 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 plugin ne peuvent pas être utilisées dans maven CLI. Les propriétés dont la propriété "Propriété utilisateur:" est définie peuvent être spécifiées. Dans l'exemple ci-dessous, je télécharge junit dans mon dossier temporaire et supprime la vesion du fichier jar.
où artifact = junit: junit: 4.11 est les coordonnées maven. Et vous spécifiez artifcat comme groupId: artifactId: version [: packaging [: classifier]]
(Merci à Pascal Thivent d'avoir fourni son https://stackoverflow.com/a/18632876/2509415 en premier lieu. J'ajoute une autre réponse)
la source
une doublure pour télécharger le dernier artefact maven sans mvn:
la source
L'utilisation de la documentation officielle:
Pour mon cas, voir la réponse ci-dessous:
Utilisez la commande "mvn dependency: get" pour télécharger un aritfact spécifique et utilisez la commande "mvn dependency: copy" pour copier l'artefact téléchargé dans le répertoire dest "-DoutputDirectory"
la source
Voici un exemple pour obtenir ASM-7 en utilisant Maven 3.6:
Ou vous pouvez télécharger le fichier à partir d'ici: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm puis
la source
La commande:
En règle générale installe l'artefact dans votre dépôt local, de sorte que vous ne devriez pas avoir à le télécharger. Cependant, si vous souhaitez partager votre artefact avec d'autres, vous devrez déployer l'artefact dans un référentiel central, voir le plugin de déploiement pour plus de détails.
De plus, l'ajout d'une dépendance à votre POM récupérera automatiquement tous les artefacts tiers dont vous avez besoin lorsque vous générez votre projet. Ie Cela téléchargera l'artefact depuis le référentiel central.
la source
LATEST
est obsolète, essayez avec la plage[,)
la source