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: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:
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 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:
<usePluginRegistry>true</usePluginRegistry>
2. Fügen Sie die Datei ~/.m2/plugin-registry.xml
mit 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:sources
an 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:version
usw. 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: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 nur javadoc
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:
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 , -Ddest
wie ich eigentlich tat will es zum normalen Download - .m2
Verzeichnis.
dest
Parameter ist veraltet und kann durch einen Aufruf von copy
after get
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
(ohne dependency: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:
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 artifact
Parameter tatsächlich aus besteht groupId:artifactId:version[:packaging][:classifier]
. Nur die Verpackung und der Klassifikator sind optional.
Mit jar
als Verpackung und sources
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.
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.