Beachten Sie, dass das Plugin 'repoUrl' möchte, obwohl in der Dokumentation 'repositoryUrl' steht. Es kann dich verrückt machen, wie es mir angetan hat!
Zakmck
In den Dokumenten ( maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html ) werden sowohl XML-Parameter (<repositoryUrl> ... </ repositoryUrl>) als auch Befehlszeilen-Benutzereigenschaften (mvn ..) angezeigt. . -DrepoUrl = "..."). Dieses spezielle Beispiel ist veraltet, also keine Sorge; jetzt ist es jetzt einheitlich remoteRepositories (in beiden Verwendungen); Beachten Sie jedoch, dass der Parameter "Ziel" 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)
Um sicherzustellen, dass das dependency:getZiel gefunden wird, müssen Sie maven ausdrücklich anweisen, die Version 2.1 zu verwenden, dh Sie müssen den vollständig qualifizierten Namen des Plugins einschließlich der Version verwenden:
UPDATE: Mit älteren Versionen von Maven (vor 2.1) ist es möglich, dependency:getnormal zu laufen (ohne den vollständig 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 erfolgen:
1. Fügen Sie die folgende Zeile in das <settings>Element Ihrer ~/.m2/settings.xmlDatei ein:
<usePluginRegistry>true</usePluginRegistry>
2. Fügen Sie die Datei ~/.m2/plugin-registry.xmlmit folgendem Inhalt hinzu:
Dies scheint jedoch mit maven 2.1 / 2.2 nicht mehr zu funktionieren. Laut der Einführung in die Plugin-Registrierung wurden die Funktionen von plugin-registry.xml(aus Gründen der Portabilität) neu gestaltet, und die Plugin-Registrierung befindet sich derzeit in Maven 2 in einem halb ruhenden Zustand . Ich denke, wir müssen vorerst den langen Namen verwenden (wenn wir das Plugin ohne Pom verwenden, was die Idee dahinter ist dependency:get).
Ja, und ich habe gerade die gleiche Auflösung mit Abhängigkeit: Ziel erreichen. mvn-Abhängigkeit: get -Dartifact = org.apache.archiva: archiva-webapp: LATEST: war -DrepoUrl = repository.sonatype.org/content/repositories/central Die einzige Unannehmlichkeit besteht darin, dass ich eine RepoUrl-Option bereitstellen muss. Ihre Informationen helfen wirklich, ich verwende mvn 2.2.1 (rdebian-1) und habe die pluginRegistry nicht berührt. Vielen Dank.
Xiè Jìléi
2
Dieses "get" -Ziel scheint wieder "nur zu funktionieren" (keine zusätzliche Konfiguration / Hacking erforderlich; 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
Was ist der Unterschied zwischen get und install? Holen sie nicht beide zu Ihrem lokalen Maven Repo? --edit: warte, nein, ich verstehe es jetzt; Bei der Installation werden Ihre lokalen Deps in das lokale m2-Repo kopiert und von einer Fernbedienung abgerufen.
(Vielen Dank an Pascal Thivent für seine wundervolle Antwort . Ich füge eine weitere Antwort hinzu, da sie nicht in einen Kommentar passt und für eine Bearbeitung zu umfangreich wäre.)
Ich habe dies verwendet, um den Maven-Archetyp herunterzuladen. Dies funktioniert hervorragend, wenn Sie sich hinter einem Proxy befinden und mit Eclipse arbeiten, das sich nicht registrieren lässt, um Maven-Archtypen zu identifizieren, obwohl Sie den Proxy in den XML-Einstellungen konfiguriert haben.
Acewin
mvn org.apache.maven.plugins: maven-dependency-plugin: 2.8: get -Dartifact = org.apache.maven.archetypes: maven-archetype-webapp: 1.0: jar
Acewin
Können Sie erklären, was jar:sourcesbedeutet / tut? Warum müssen Sie "jar" angeben? und bedeutet "Quellen", dass zusätzliche Abhängigkeiten heruntergeladen werden, die das Artefakt benötigt?
Red888
"jar" ist der Verpackungstyp, "sources" ist der Klassifikator. Bei einer Abhängigkeit (z. B. Hibernate-Core ) kann es mehr als ein Artefakt geben. Oft gibt es: 1. die Nur-Binär-Bibliothek, 2. sourceseine JAR-Datei, die nur Java-Quellen enthält, 3. eine JAR-Datei, die nur javadocAPI-Dokumente enthält. Siehe auch: Maven Default Artifact Handlers .
Danilo Piazzalunga
Vielen Dank für die Klarstellung, wie man die [:classifier]richtig verwendet, wenn ich ein Assemlby-Plugin erstellt habe, das ich herunterladen möchte.
Jonashackt
43
Hier ist, was für mich funktioniert hat, um am Ende die neueste Version eines Artefakts namens "component.jar" mit Maven 3.1.1 herunterzuladen (andere Vorschläge haben dies nicht getan, hauptsächlich aufgrund von Änderungen der Maven-Version, glaube ich).
Dadurch wird die Datei tatsächlich heruntergeladen und in das lokale Arbeitsverzeichnis kopiert
Vielen Dank! Ich brauchte das Event nicht -DrepoUrl, ich denke es wurde sowieso von meinem Pom impliziert. Auch habe ich nicht verwenden , -Ddestwie ich eigentlich tat will es zum normalen Download - .m2Verzeichnis.
yair
15
Der destParameter ist veraltet und kann durch einen Aufruf von copyafter getlike so ersetzt werden: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.(in diesem Fall platzieren Sie das jar im Arbeitsverzeichnis).
Jacob Raihle
@JacobRaihle Dann kann ich keine Datei ohne pom.xml herunterladen, da der folgende Fehler auftritt : Goal requires a project to execute but there is no POM in this directory.
Athlan
2
@Athlan No-Pom-Unterstützung ist möglicherweise eine neuere Funktion, nehme ich an. Heutzutage kann ich einfach laufen mvn dependency:copy(ohne dependency:getvorher).
Dies funktioniert, weil der artifactParameter tatsächlich aus besteht groupId:artifactId:version[:packaging][:classifier]. Nur die Verpackung und der Klassifikator sind optional.
Mit jarals Verpackung und sourcesals Klassifikator versteht das Maven-Abhängigkeits-Plugin, dass wir nach dem Quell-Jar fragen, nicht nach dem Artefakt-Jar.
Leider können JAR-Dateien für Quellen derzeit nicht transitiv heruntergeladen werden, was zwar sinnvoll ist, aber im Idealfall glaube ich, dass sie die Option downloadSourcesgenauso respektieren können wie das Maven Eclipse-Plugin.
Man könnte dependency: copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ) verwenden, das eine Liste der im Plugin-Konfigurationsabschnitt definierten Artefakte nimmt und sie an einen bestimmten Speicherort kopiert , benennen Sie sie um oder entfernen Sie die Version, falls gewünscht. Dieses Ziel kann die Artefakte aus Remote-Repositorys auflösen, wenn sie weder im lokalen Repository noch im Reaktor vorhanden sind.
Nicht alle Eigenschaften des Plugins konnten in der 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 herunter und entferne die Version aus der JAR-Datei.
Verwenden Sie den Befehl "mvn dependency: get", um ein bestimmtes Artefakt herunterzuladen, und verwenden Sie den Befehl "mvn dependency: copy", um das heruntergeladene Artefakt in das Zielverzeichnis "-DoutputDirectory" zu kopieren.
Typischerweise installiert das Artefakt in Ihrem lokalen Repository, so sollten Sie es nicht herunterladen. Wenn Sie Ihr Artefakt jedoch für andere freigeben möchten, müssen Sie das Artefakt in einem zentralen Repository bereitstellen. Weitere Informationen finden Sie im Bereitstellungs-Plugin .
Durch Hinzufügen einer Abhängigkeit zu Ihrem POM werden automatisch alle Artefakte von Drittanbietern abgerufen, die Sie beim Erstellen Ihres Projekts benötigen. Dies wird das Artefakt aus dem zentralen Repository herunterladen.
Antworten:
Sie können das Maven-Abhängigkeits-Plugin verwenden, das
dependency:get
seit Version 2.1 ein gutes Ziel hat. Kein Pom erforderlich, alles geschieht über die Befehlszeile.Um sicherzustellen, dass das
dependency:get
Ziel gefunden wird, müssen Sie maven ausdrücklich anweisen, die Version 2.1 zu verwenden, dh Sie müssen den vollständig qualifizierten Namen des Plugins einschließlich der Version verwenden:UPDATE: Mit älteren Versionen von Maven (vor 2.1) ist es möglich,
dependency:get
normal zu laufen (ohne den vollständig 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 erfolgen:
1. Fügen Sie die folgende Zeile in das
<settings>
Element Ihrer~/.m2/settings.xml
Datei ein:2. Fügen Sie die Datei
~/.m2/plugin-registry.xml
mit folgendem Inhalt hinzu:Dies scheint jedoch mit maven 2.1 / 2.2 nicht mehr zu funktionieren. Laut der Einführung in die Plugin-Registrierung wurden die Funktionen von
plugin-registry.xml
(aus Gründen der Portabilität) neu gestaltet, und die Plugin-Registrierung befindet sich derzeit in Maven 2 in einem halb ruhenden Zustand . Ich denke, wir müssen vorerst den langen Namen verwenden (wenn wir das Plugin ohne Pom verwenden, was die Idee dahinter istdependency:get
).quelle
:jar:sources
an das Artefakt anhängen , siehe stackoverflow.com/a/31109185/537554mvn dependency:get -Dartifact=group-id:artefact-id:version
Mit der neuesten Version (2.8) des Maven Dependency Plugin ist das Herunterladen eines Artefakts aus dem Maven Central Repository so einfach wie:
wo
groupId:artifactId:version
usw. sind die Maven-KoordinatenEin Beispiel, getestet mit Maven 2.0.9, Maven 2.2.1 und Maven 3.0.4:
(Vielen Dank an Pascal Thivent für seine wundervolle Antwort . Ich füge eine weitere Antwort hinzu, da sie nicht in einen Kommentar passt und für eine Bearbeitung zu umfangreich wäre.)
quelle
jar:sources
bedeutet / tut? Warum müssen Sie "jar" angeben? und bedeutet "Quellen", dass zusätzliche Abhängigkeiten heruntergeladen werden, die das Artefakt benötigt?sources
eine JAR-Datei, die nur Java-Quellen enthält, 3. eine JAR-Datei, die nurjavadoc
API-Dokumente enthält. Siehe auch: Maven Default Artifact Handlers .[:classifier]
richtig verwendet, wenn ich ein Assemlby-Plugin erstellt habe, das ich herunterladen möchte.Hier ist, was für mich funktioniert hat, um am Ende die neueste Version eines Artefakts namens "component.jar" mit Maven 3.1.1 herunterzuladen (andere Vorschläge haben dies nicht getan, hauptsächlich aufgrund von Änderungen der Maven-Version, glaube ich).
Dadurch wird die Datei tatsächlich heruntergeladen und in das lokale Arbeitsverzeichnis kopiert
Von Bash:
quelle
-DrepoUrl
, ich denke es wurde sowieso von meinem Pom impliziert. Auch habe ich nicht verwenden ,-Ddest
wie ich eigentlich tat will es zum normalen Download -.m2
Verzeichnis.dest
Parameter ist veraltet und kann durch einen Aufruf voncopy
afterget
like so ersetzt werden:mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.
(in diesem Fall platzieren Sie das jar im Arbeitsverzeichnis).Goal requires a project to execute but there is no POM in this directory
.mvn dependency:copy
(ohnedependency:get
vorher).In Bezug auf das Erhalten der Artefakt-Binärdatei lautet die Antwort von Pascal Thivent: Um jedoch auch das Glas mit den Artefaktquellen zu erhalten, können wir Folgendes verwenden:
z.B
Dies funktioniert, weil der
artifact
Parameter tatsächlich aus bestehtgroupId:artifactId:version[:packaging][:classifier]
. Nur die Verpackung und der Klassifikator sind optional.Mit
jar
als Verpackung undsources
als Klassifikator versteht das Maven-Abhängigkeits-Plugin, dass wir nach dem Quell-Jar fragen, nicht nach dem Artefakt-Jar.Leider können JAR-Dateien für Quellen derzeit nicht transitiv heruntergeladen werden, was zwar sinnvoll ist, aber im Idealfall glaube ich, dass sie die Option
downloadSources
genauso respektieren können wie das Maven Eclipse-Plugin.quelle
Man könnte dependency: copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ) verwenden, das eine Liste der im Plugin-Konfigurationsabschnitt definierten Artefakte nimmt und sie an einen bestimmten Speicherort kopiert , benennen Sie sie um oder entfernen Sie die Version, falls gewünscht. Dieses Ziel kann die Artefakte aus Remote-Repositorys auflösen, wenn sie weder im lokalen Repository noch im Reaktor vorhanden sind.
Nicht alle Eigenschaften des Plugins konnten in der 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 herunter und entferne die Version aus der JAR-Datei.
Dabei ist Artefakt = Junit: Junit: 4.11 die Maven-Koordinaten. Und Sie geben artifcat als groupId :ifactId: version [: package [: classifier]] an.
(Vielen Dank an Pascal Thivent für die Bereitstellung seiner https://stackoverflow.com/a/18632876/2509415 . Ich füge eine weitere Antwort hinzu.)
quelle
Ein Liner zum Herunterladen des neuesten Maven-Artefakts ohne MVN:
quelle
Die Verwendung aus der offiziellen Dokumentation:
Für meinen Fall siehe die Antwort unten:
Verwenden Sie den Befehl "mvn dependency: get", um ein bestimmtes Artefakt herunterzuladen, und verwenden Sie den Befehl "mvn dependency: copy", um das heruntergeladene Artefakt in das Zielverzeichnis "-DoutputDirectory" zu kopieren.
quelle
Hier ist ein Beispiel, um ASM-7 mit Maven 3.6 zu erhalten:
Oder Sie können das Glas hier herunterladen: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm und dann
quelle
Der Befehl:
Typischerweise installiert das Artefakt in Ihrem lokalen Repository, so sollten Sie es nicht herunterladen. Wenn Sie Ihr Artefakt jedoch für andere freigeben möchten, müssen Sie das Artefakt in einem zentralen Repository bereitstellen. Weitere Informationen finden Sie im Bereitstellungs-Plugin .
Durch Hinzufügen einer Abhängigkeit zu Ihrem POM werden automatisch alle Artefakte von Drittanbietern abgerufen, die Sie beim Erstellen Ihres Projekts benötigen. Dies wird das Artefakt aus dem zentralen Repository herunterladen.
quelle
LATEST
ist veraltet, versuchen Sie es mit Reichweite[,)
quelle