Ich kann ein Artefakt installieren install:install-file, aber wie kann ich ein Artefakt herunterladen?
Beispielsweise:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Ich kann ein Artefakt installieren install:install-file, aber wie kann ich ein Artefakt herunterladen?
Beispielsweise:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Antworten:
Sie können das Maven-Abhängigkeits-Plugin verwenden, das dependency:getseit Version 2.1 ein gutes Ziel hat. Kein Pom erforderlich, alles geschieht über die Befehlszeile.
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:
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: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:
<?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>
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).
:jar:sourcesan das Artefakt anhängen , siehe stackoverflow.com/a/31109185/537554
mvn 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:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]]
wo groupId:artifactId:versionusw. sind die Maven-Koordinaten
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
(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.)
jar:sourcesbedeutet / tut? Warum müssen Sie "jar" angeben? und bedeutet "Quellen", dass zusätzliche Abhängigkeiten heruntergeladen werden, die das Artefakt benötigt?
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 .
[: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:
mvn dependency:get \
-DrepoUrl=http://.../ \
-Dartifact=com.foo.something:component:LATEST:jar \
-Dtransitive=false \
-Ddest=component.jar \
-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.
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).
Goal requires a project to execute but there is no POM in this directory.
mvn dependency:copy(ohne dependency:getvorher).
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:
mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources
z.B
mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources
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.
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true
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.)
Ein Liner zum Herunterladen des neuesten Maven-Artefakts ohne MVN:
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"
Die Verwendung aus der offiziellen Dokumentation:
https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency:get
Für meinen Fall siehe die Antwort unten:
mvn dependency:get -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false
mvn dependency:copy -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false -DoutputDirectory=$6
#mvn dependency:get -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false
#mvn dependency:copy -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false -DoutputDirectory=.
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.
Hier ist ein Beispiel, um ASM-7 mit Maven 3.6 zu erhalten:
mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar
Oder Sie können das Glas hier herunterladen: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm und dann
mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar
Der Befehl:
mvn install:install-file
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.