2009-12-13 4 views
108

Ich kann einen Artefakt installieren installieren: install-Datei, aber wie kann ich herunterladen dann zum Beispiel:Wie kann ich ein bestimmtes Maven-Artefakt in einer Befehlszeile herunterladen?

mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST 

irgendeine Idee?

+8

Achten Sie darauf, dass das Plugin "RepoUrl" möchte, obwohl die Dokumentation "repositoryUrl" lautet. Es kann dich verrückt machen, wie es mir angetan hat! – zakmck

+0

die Dokumentation (http: //maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html) zeigt sowohl XML-Parameter ( ...) als auch Befehlszeilen-Benutzereigenschaften (mvn ... -DrepoUrl = ".. . "). Dieses spezielle Beispiel ist veraltet, also keine Sorgen; jetzt ist es jetzt einheitlich remoteRepositories (in beiden Verwendungen); Beachten Sie jedoch, dass der Parameter "destination" die Benutzereigenschaft "-Ddest = ..." ist. zB => 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

Antwort

117

Sie könnten die maven dependency plugin verwenden, die ein nettes dependency:get Ziel seit Version 2.1 hat. Keine Notwendigkeit für einen Pom, alles passiert in der Befehlszeile.

Um sicherzustellen, dass das dependency:get Ziel zu finden, müssen Sie Maven explizit sagen, die Version 2.1, dh Sie können den vollständigen Namen des Plugins verwenden müssen, verwenden, einschließlich der Version:

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

UPDATE: Mit älteren Versionen von Maven (vor 2.1) ist es möglich, dependency:get normal auszuführen (ohne den voll qualifizierten Namen und die Version zu verwenden), indem Sie Ihre Kopie von maven zwingen, eine bestimmte Version eines Plugins zu verwenden.

Dies kann wie folgt geschehen:

1. die folgende Zeile innerhalb des <settings> Element Ihrer ~/.m2/settings.xml Datei hinzufügen:

<usePluginRegistry>true</usePluginRegistry> 

2. die Datei ~/.m2/plugin-registry.xml mit folgendem Inhalt hinzufügen :

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

Aber das scheint mit maven 2.1/2.2 nicht mehr zu funktionieren. Tatsächlich, nach der Introduction to the Plugin Registry, Features der plugin-registry.xml wurden neu gestaltet (für Portabilität) und die Plugin-Registrierung ist derzeit in einem halb ruhenden Zustand innerhalb Maven 2. Also ich denke, wir müssen den langen Namen für jetzt verwenden (bei Verwendung des Plugins ohne Pom, was die Idee hinter dependency:get ist).

+1

Ja, und ich habe gerade die gleiche Auflösung mit der Abhängigkeit: Get Goal. mvn Abhängigkeit: get -Dartifact = org.apache.archiva: Archiva-Webapp: AKTUELLE: Krieg -DrepoUrl = http: //repository.sonatype.org/content/repositories/central/ Der einzige Nachteil ist, dass ich muss bietet eine RepoUrl-Option. Ihre Informationen helfen mir wirklich, ich benutze mvn 2.2.1 (rdebian-1) und habe das pluginRegistry nicht berührt. Danke. –

+2

Dieses "get" -Ziel scheint wieder "zu funktionieren" (keine zusätzliche Konfiguration/Hacking erforderlich; Plugin 2.5.1, mvn 3.0.4): = Beispiel => mvn org.apache.maven.plugins: maven-dependency-plugin : 2.5.1: get -DremoteRepositories = http: //repo.maven.apache.org -Dartifact = org.apache.ant: ant: 1.8.1 -Ddest = ant-1.8.1.jar – michael

+0

Was ist der Unterschied zwischen Get und installieren? Holen sie nicht beide zu ihrem lokalen Maven Repo? --Edit: Warte, nein, ich verstehe es jetzt; install ist für * Ihre * lokalen Deps, die auf den lokalen m2 Repo kopiert werden sollen, holt sie von einer Fernbedienung. – Chris2048

0

Der Befehl:

mvn install:install-file 

Typischerweise installs das Artefakt in Ihrem lokalen Repository, so sollten Sie es nicht herunterladen. Wenn Sie Ihr Artefakt jedoch mit anderen teilen möchten, müssen Sie das Artefakt in einem zentralen Repository bereitstellen. Weitere Informationen finden Sie unter deploy plugin.

Das Hinzufügen eines dependency zu Ihrem POM wird automatisch Artefakte von Drittanbietern abrufen, die Sie beim Erstellen Ihres Projekts benötigen. I.e. Dadurch wird das Artefakt vom zentralen Repository heruntergeladen.

60

Mit der neuesten Version (2.8) des Maven Dependency Plugin, ist ein Artefakt aus dem Maven Zentrales Repository Download so einfach wie:

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

wo groupId:artifactId:version usw. sind die Maven coordinates

Ein Beispiel, getestet mit Maven 2.0.9, Maven 2.2.1 und 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 

(Dank Pascal Thivent für seine wonderful answer in erster Linie die Bereitstellung ich eine andere Antwort bin hinzufügen, weil es nicht in einem Kommentar passen würde, und es wäre für eine Bearbeitung zu umfangreich sein..)

+0

Ich benutzte dies, um Maven Archetype herunterzuladen. Dies funktioniert hervorragend, wenn Sie sich hinter einem Proxy befinden und mit eclipse arbeiten, das sich nicht registriert, um maven archtypes zu identifizieren, obwohl Sie den Proxy in den Einstellungen xml konfiguriert haben. – Acewin

+0

mvn org.apache.maven.plugins: maven-dependency-plugin: 2.8: get -Dartifact = org.apache.maven.archtypes: maven-archetype-webapp: 1.0: jar – Acewin

22

Hier ist, was für mich gearbeitet, um die neueste Version eines Artefakts „component.jar“ mit Maven 3.1.1 am Ende (andere Vorschläge nicht, vor allem wegen Maven Version Änderungen glaube ich) genannt herunterladen

Diese lädt die Datei tatsächlich herunter und kopiert sie in das lokale Arbeitsverzeichnis

Von bash:

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

Arbeitete auch für mich - danke. Maven 3.3.3 – akauppi

+0

Großartig, danke! Ich habe das Event nicht benötigt, ich vermute es wurde von meinem POM angedeutet. Außerdem habe ich '' Ddest' nicht so benutzt, wie ich es eigentlich * wollte * in das normale '.m2'-Verzeichnis herunterladen möchte. – yair

+2

Der 'dest' Parameter [ist veraltet] (http://maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html#destination), und kann durch eine Invokation von [' copy' ersetzt werden ] (http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html) nach "get" wie folgt: 'mvn-Abhängigkeit: copy -Dartifact = com.foo.etwas: component: LATEST : jar -DoutputDirectory = .' (in diesem Fall wird das JAR im Arbeitsverzeichnis platziert). –

9

einzeiler neueste Maven Artefakt ohne mvn zum Download:

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" 
+0

Downvoted. Diese Lösung scheint nur mit einem bestimmten Repository-Produkt zu funktionieren. –

+0

Arbeitete gut mit Nexus 2.x, funktioniert nicht mit 3.x (noch) – HDave

+0

curl: option -J ist unbekannt – xuehui

6

Eine Abhängigkeit verwenden: copy (http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html), die eine Liste von Artefakten definiert in der Plugin-Konfiguration nimmt Abschnitt und kopiert sie an einen bestimmten Ort, umbenennen sie oder strippen die Version, falls gewünscht. Dieses Ziel kann die Artefakte von Remote-Repositorys auflösen, wenn sie weder im lokalen Repository noch im Reaktor vorhanden sind.

Nicht alle Eigenschaften des Plugins konnten in maven CLI verwendet werden. Die Eigenschaften, für die die Eigenschaft "Benutzereigenschaft:" definiert ist, können angegeben werden. Im folgenden Beispiel lade ich Junit in meinen temporären Ordner und entpacke die Vesion aus der JAR-Datei.

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

wo Artefakt = junit: junit: 4.11 ist die maven koordiniert. Und Sie geben artifcat als groupId: artifactId: version [: packaging [: Klassifikator]]

(Dank an Pascal Thivent für seine https://stackoverflow.com/a/18632876/2509415 in erster Linie die Bereitstellung Ich füge eine andere Antwort.)

+0

Danke! Sie können auch einfach "mvn dependency: copy ..." verwenden. –

11

In Bezug auf, wie man das Artefakt binär, Pascal Thivent's answer ist es aber auch das Artefakt Quellen Glas zu bekommen, können wir verwenden:

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

zB Diese

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

funktioniert, weil der artifact Parameter besteht eigentlich aus groupId:artifactId:version[:packaging][:classifier]. Nur die Verpackung und Klassifikator sind optional.

Mit jar als Verpackung und sources als Klassifikator, die Maven Abhängigkeit Plugin versteht wir für die Quellen jar sind gefragt, nicht das Artefakt Glas.

Leider können Quellen jar Dateien nicht transitiv heruntergeladen werden, was sinnvoll ist, aber im Idealfall glaube ich, dass es auch die Option downloadSources genauso respektieren kann wie das maven eclipse Plugin.

Verwandte Themen