Eine einfache Befehlszeile zum Herunterladen eines Remote-Artefakts von maven2 in das lokale Repository?

122

Ich habe eine Bibliothek, die ich mit Maven 2 verteile. Der typische Benutzer dieser Bibliothek verwendet Maven nicht zum Erstellen seiner Anwendungen, ist jedoch wahrscheinlich mit Maven vertraut und hat sie wahrscheinlich installiert.

Ich möchte einen "einfachen" einzeiligen Befehl dokumentieren, mit dem sie die Artefakte meiner Bibliothek auf ihre lokale ~/.m2/repositoryWebsite herunterladen können, ohne dass sie dafür eine pom.xml einrichten müssen.

Ich dachte, es gäbe eine Möglichkeit, dies zu tun, aber ich kann es nicht finden, nachdem ich die Dokumentation install:install-fileund das dependencyPlugin durchgesehen habe . Ich habe Dinge ausprobiert wie:

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

Aber ich glaube, ich belle den falschen Baum an, da das Installations-Plugin anscheinend verwendet wird, um lokal erstellte Dateien in das lokale Repository zu kopieren, anstatt Remote-Artefakte in das lokale Repository herunterzuladen.

Dies ist das Artefakt, das ich installieren möchte: http://download.java.net/maven/2/robo-guice/robo-guice/0.4-SNAPSHOT/

Ist das mit Maven möglich?

emmby
quelle

Antworten:

168

Seit Version 2.1 des Maven Dependency Plugin gibt es eine Abhängigkeit: get target für diesen Zweck. Um sicherzustellen, dass Sie die richtige Version des Plugins verwenden, müssen Sie den "vollständig qualifizierten Namen" verwenden:

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
Pascal Thivent
quelle
Besonders hilfreich, um zu zeigen, wie das Abhängigkeits-Plugin selbst installiert wird.
Sergio Acosta
2
Pascal, können Sie mir sagen, wie Benutzer + Passwort definiert werden, um das Repository zu erreichen? Der Trick mit dem Benutzer: password @ repourl hat nicht funktioniert.
Gábor Lipták
4
Das Ziel ist schön, aber wie kann ich das Zielverzeichnis definieren, in das die Datei kopiert werden soll? (und Dateiname)
Domi
9
@domi (verspätete Antwort für die Nachwelt): benutze "-Ddest = path / to / my.jar"; Andernfalls wird es nur in Ihr lokales ~ / .m2 / Repository kopiert (es sieht so aus, als wäre nichts passiert). Siehe 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 (Ergebnis: ant-1.8.1.jar im aktuellen Verzeichnis)
Michael
3
Vielen Dank! Während in dem von Ihnen geposteten Dokumentlink Deprecated. Use remoteRepositoriesfür repoUrl. Bitte aktualisieren Sie die Antwort vielleicht :)
Wochenende
46

Geben Sie ihnen einen trivialen Pom mit diesen Gläsern, die als Abhängigkeiten und Anweisungen zum Ausführen aufgeführt sind:

mvn dependency:go-offline

Dadurch werden die Abhängigkeiten zum lokalen Repo gezogen.

Eine direktere Lösung ist die Abhängigkeit: get , aber es gibt viele Argumente, die eingegeben werden müssen:

mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version
bmargulies
quelle
Gute Idee, obwohl eine Befehlszeile, die sie kopieren und einfügen könnten, einfacher wäre
emmby
Wenn mir einer einfallen würde, würde ich ihn posten. Ich kenne kein Plugin, das genau das tut, was verlangt wird. Ich weiß, wie man einen schreibt ...
bmargulies
Das getMojo erwartet tatsächlich -DrepoUrl, anwesend zu sein, nicht -DrepositoryUrl. In Bezug auf die zu tippenden Argumente gibt es keine Magie, Sie müssen diese Informationen auf die eine oder andere Weise bereitstellen.
Pascal Thivent
In meinem ersten Schema gibt der Endbenutzer nur drei Zeichen ein: mvn. Alle anderen Eingaben werden von der Operation durchgeführt.
Bmargulies
22

Ab Version 2.4 des Maven Dependency Plugin können Sie mit dem Flag -Ddest auch ein Ziel für das Artefakt definieren. Es sollte auf einen Dateinamen (kein Verzeichnis) für das Zielartefakt verweisen. Auf der Parameterseite finden Sie weitere Parameter, die verwendet werden können

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
Eric B.
quelle
2
Vielen Dank! -Ddest ist als veraltet markiert. Gibt es eine neue Lösung?
Dimath
1
Verwenden Sie stattdessen Abhängigkeit: Ziel kopieren. maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html
Eric B.
3
Das Kopierziel kopiert keine transitiven Deps.
Renato