Une simple ligne de commande pour télécharger un artefact maven2 distant dans le référentiel local?

123

J'ai une bibliothèque que je distribue en utilisant maven 2. L'utilisateur typique de cette bibliothèque n'utilise pas maven pour construire ses applications, mais est probablement un peu familier avec maven et l'a probablement installé.

Je voudrais documenter une commande "simple" d'une ligne qu'ils peuvent utiliser pour télécharger les artefacts de ma bibliothèque dans leur local ~/.m2/repositorysans exiger qu'ils mettent en place un pom.xml pour le faire.

Je pensais qu'il y avait un moyen de le faire, mais je n'arrive pas à le trouver après avoir parcouru la documentation du plugin install:install-fileet dependency. J'ai essayé des choses comme:

mvn install:install-file -DrepositoryId=java.net -Durl=http://download.java.net/maven/2/ -Dfile=robo-guice-0.4-20091121.174618-1.jar -DpomFile=robo-guice-0.4-20091121.174618-1.pom -DgroupId=robo-guice -DartifactId=robo-guice -Dversion=0.4-SNAPSHOT -Dpackaging=jar

mais je pense que j'aboie le mauvais arbre car il semble que le plugin d'installation est utilisé pour copier des fichiers construits localement dans le référentiel local, plutôt que pour télécharger des artefacts distants dans le référentiel local.

Voici l'artefact que je voudrais installer: http://download.java.net/maven/2/robo-guice/robo-guice/0.4-SNAPSHOT/

Est-ce possible avec maven?

emmby
la source

Réponses:

168

Depuis la version 2.1 du Maven Dependency Plugin , il existe une dépendance: get goal à cet effet. Pour vous assurer que vous utilisez la bonne version du plugin, vous devrez utiliser le "nom complet":

mvn org.apache.maven.plugins: maven-dependency-plugin: 2.1: get \
    -DrepoUrl = http: //download.java.net/maven/2/ \
    -Dartifact = robo-guice: robo-guice: 0.4-INSTANTANÉ
Pascal Thivent
la source
Très utile pour montrer comment installer le plugin de dépendance lui-même.
Sergio Acosta
2
Pascal, pouvez-vous me dire comment définir l'utilisateur + mot de passe pour accéder au référentiel avec? L'astuce avec user: password @ repourl n'a pas fonctionné.
Gábor Lipták
4
le but est bien, mais comment puis-je définir le répertoire cible dans lequel je veux que le fichier soit copié? (et nom du fichier)
domi
9
@domi (réponse tardive pour la postérité): utilisez "-Ddest = chemin / vers / mon.jar"; sinon, il est simplement copié dans votre référentiel ~ / .m2 / local (cela donne l'impression que rien ne s'est passé). Voir maven.apache.org/plugins/maven-dependency-plugin/… = 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 (résultat: ant-1.8.1.jar dans le répertoire courant)
michael
3
Merci! Alors que, dans le lien doc que vous avez posté, il y a Deprecated. Use remoteRepositoriespour repoUrl. Veuillez mettre à jour la réponse peut-être :)
Week
47

Donnez-leur un pom trivial avec ces jars répertoriés comme dépendances et instructions à exécuter:

mvn dependency:go-offline

Cela attirera les dépendances vers le dépôt local.

Une solution plus directe est la dépendance: get , mais il y a beaucoup d'arguments à taper:

mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version
bmargulies
la source
Bonne idée, même si une ligne de commande qu'ils pourraient copier-coller serait plus facile
emmby
Si je pouvais en penser à un, je le posterais. Je ne connais aucun plugin qui fasse exactement ce qui est demandé. Je sais en écrire un ...
bmargulies
Le getmojo s'attend en fait -DrepoUrlà être présent, non -DrepositoryUrl. Concernant les arguments à taper, il n'y a pas de magie, il faut fournir ces informations d'une manière ou d'une autre.
Pascal Thivent
Dans mon premier schéma, l'utilisateur final ne tape que trois caractères: mvn. Tous les autres types de frappe sont effectués par l'op.
bmargulies
22

Depuis la version 2.4 du plugin de dépendance Maven , vous pouvez également définir une destination cible pour l'artefact en utilisant l'indicateur -Ddest. Il doit pointer vers un nom de fichier (pas un répertoire) pour l'artefact de destination. Voir la page des paramètres pour les paramètres supplémentaires qui peuvent être utilisés

mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get \
    -DremoteRepositories=http://download.java.net/maven/2 \
    -Dartifact=robo-guice:robo-guice:0.4-SNAPSHOT \
    -Ddest=c:\temp\robo-guice.jar
Éric B.
la source
2
Merci! -Ddest est marqué comme obsolète. Existe-t-il une nouvelle solution?
Dimath
1
Utilisez la dépendance: copiez l'objectif à la place. maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html
Eric B.
3
l'objectif de copie ne copie pas les deps transitifs.
Renato