Una semplice riga di comando per scaricare un artefatto maven2 remoto nel repository locale?


122

Ho una libreria che distribuisco usando Maven 2. L'utente tipico di questa libreria non usa Maven per creare le proprie applicazioni, ma probabilmente ha una certa familiarità con Maven e probabilmente l'ha installato.

Vorrei documentare un "semplice" comando di una riga che possono usare per scaricare gli artefatti della mia libreria nel loro locale ~/.m2/repositorysenza richiedere che abbiano impostato un pom.xml per farlo.

Pensavo ci fosse un modo per farlo, ma non riesco a trovarlo dopo aver esaminato la documentazione del plug-in install:install-filee dependency. Ho provato cose come:

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

ma penso di aver abbaiato l'albero sbagliato poiché sembra che il plug-in di installazione venga utilizzato per copiare file creati localmente nel repository locale, piuttosto che scaricare artefatti remoti nel repository locale.

Questo è il manufatto che vorrei installare: http://download.java.net/maven/2/robo-guice/robo-guice/0.4-SNAPSHOT/

È possibile utilizzare Maven?



Risposte:


168

Dalla versione 2.1 del plug-in Maven Dependency , esiste una dipendenza: get goal per questo scopo. Per assicurarti di utilizzare la versione corretta del plug-in, dovrai utilizzare il "nome completo":

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

Molto utile per mostrare come installare il plugin per le dipendenze stesso.
Sergio Acosta

2
Pascal, puoi dirmi come definire utente + password con cui raggiungere il repository? Il trucco con l' utente: password @ repourl non ha funzionato.
Gábor Lipták

4
l'obiettivo è carino, ma come posso definire la directory di destinazione in cui voglio che il file venga copiato? (e nome file)
domi

9
@domi (risposta tardiva per i posteri): usa "-Ddest = path / to / my.jar"; altrimenti, viene semplicemente copiato nel tuo repository ~ / .m2 / locale (fa sembrare che non sia successo nulla). Vedi 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 (risultato: ant-1.8.1.jar nella directory corrente)
michael

3
Grazie! Mentre, nel link al documento che hai pubblicato, c'è Deprecated. Use remoteRepositoriesper repoUrl. Si prega di aggiornare la risposta forse :)
Fine settimana

46

Dai loro un pom banale con questi barattoli elencati come dipendenze e istruzioni da eseguire:

mvn dependency:go-offline

Questo attiverà le dipendenze al repository locale.

Una soluzione più diretta è la dipendenza: get , ma ci sono molti argomenti da digitare:

mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version

Buona idea, anche se una riga di comando da copiare e incollare sarebbe più semplice
emmby

Se potessi pensare a uno lo pubblicherei. Non conosco alcun plugin che faccia proprio quello che è richiesto. So come scriverne uno ...
bmargulies

Il getmojo in realtà si aspetta -DrepoUrldi essere presente, no -DrepositoryUrl. Per quanto riguarda gli argomenti da digitare, non c'è magia, è necessario fornire queste informazioni in un modo o nell'altro.
Pascal Thivent

Nel mio primo schema, l'utente finale digita solo tre caratteri: mvn. Tutte le altre battute vengono eseguite dall'op.
bmargulies

22

A partire dalla versione 2.4 del plug-in per le dipendenze Maven , puoi anche definire una destinazione di destinazione per l'artefatto utilizzando il flag -Ddest. Dovrebbe puntare a un nome file (non una directory) per l'elemento di destinazione. Vedere la pagina dei parametri per ulteriori parametri che possono essere utilizzati

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

2
Grazie! -Ddest è contrassegnato come deprecato. C'è una nuova soluzione nuova?
Dimath

1
Usa la dipendenza: copia invece l'obiettivo. maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html
Eric B.

3
l'obiettivo della copia non copia le operazioni transitive.
Renato
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.