Posso installare un artefatto da install:install-file , ma come posso scaricare un artefatto?
Per esempio:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Posso installare un artefatto da install:install-file , ma come posso scaricare un artefatto?
Per esempio:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Risposte:
È possibile utilizzare il plug-in di dipendenza Maven che ha un buondependency:get obiettivo dalla versione 2.1. Non c'è bisogno di un pom, tutto accade dalla riga di comando.
Per essere sicuri di trovare l' dependency:getobiettivo, è necessario indicare esplicitamente a maven di utilizzare la versione 2.1, ovvero è necessario utilizzare il nome completo del plug-in, inclusa la versione:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get \
-DrepoUrl=url \
-Dartifact=groupId:artifactId:version
AGGIORNAMENTO: con le versioni precedenti di Maven (precedenti alla 2.1), è possibile eseguiredependency:get normalmente (senza utilizzare il nome e la versione completi) forzando la propria copia di Maven a utilizzare una determinata versione di un plugin.
Questo può essere fatto come segue:
1. Aggiungi la seguente riga all'interno <settings>dell'elemento del tuo ~/.m2/settings.xmlfile:
<usePluginRegistry>true</usePluginRegistry>
2. Aggiungi il file ~/.m2/plugin-registry.xmlcon il seguente contenuto:
<?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>
Ma questo non sembra funzionare più con Maven 2.1 / 2.2. In realtà, secondo l' Introduzione al Registro dei Plugin , le funzionalità di plugin-registry.xmlsono state riprogettate (per la portabilità) e il registro dei plugin è attualmente in uno stato semi-dormiente all'interno di Maven 2 . Quindi penso che dobbiamo usare il nome lungo per ora (quando si usa il plugin senza un pom, che è l'idea alla base dependency:get).
:jar:sourcesal manufatto , vedere stackoverflow.com/a/31109185/537554
mvn dependency:get -Dartifact=group-id:artefact-id:version
Con l'ultima versione (2.8) del plug-in di dipendenza Maven , scaricare un artefatto dal repository Maven Central è semplice come:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]]
dove groupId:artifactId:version, ecc. sono le coordinate di Maven
Un esempio, testato con Maven 2.0.9, Maven 2.2.1 e 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
(Grazie a Pascal Thivent per aver fornito la sua meravigliosa risposta in primo luogo. Sto aggiungendo un'altra risposta, perché non si adatterebbe a un commento e sarebbe troppo estesa per una modifica.)
jar:sourcessignifica / fa? perché devi specificare "jar"? e "fonti" significa che scaricherà dipendenze aggiuntive richieste dal manufatto?
sources, un file JAR contenente solo origini Java, 3. javadoc, un file JAR con solo documenti API. Vedi anche: Gestori di manufatti predefiniti Maven .
[:classifier]correttamente, se ho un plugin assemlby creato il file zip che voglio scaricare.
Ecco cosa ha funzionato per me per scaricare l'ultima versione di un artefatto chiamato "component.jar" con Maven 3.1.1 alla fine (altri suggerimenti non hanno funzionato, principalmente a causa delle modifiche alla versione di Mven credo)
Questo effettivamente scarica il file e lo copia nella directory di lavoro locale
Da bash:
mvn dependency:get \
-DrepoUrl=http://.../ \
-Dartifact=com.foo.something:component:LATEST:jar \
-Dtransitive=false \
-Ddest=component.jar \
-DrepoUrl, immagino fosse comunque implicito dal mio pom. Anche io non ho usato -Ddestcome ho effettivamente fatto voglia di esso scaricare al normale .m2directory.
destparametro è obsoleto e può essere sostituito con un richiamo di copyafter in questo getmodo: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.(in questo caso posizionando il jar nella directory di lavoro).
Goal requires a project to execute but there is no POM in this directory.
mvn dependency:copy(senza dependency:getprima).
Per quanto riguarda come ottenere il binario del manufatto, la risposta di Pascal Thivent è, ma per ottenere anche il vaso delle fonti del manufatto, possiamo usare:
mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources
per esempio
mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources
Questo funziona perché il artifactparametro è effettivamente costituito da groupId:artifactId:version[:packaging][:classifier]. Solo l' imballaggio e il classificatore sono opzionali.
Con jarcome confezione e sourcescome classificatore , il plugin di dipendenza maven comprende che stiamo chiedendo il vaso dei sorgenti, non il vaso degli artefatti.
Sfortunatamente per ora i file jar di fonti non possono essere scaricati in modo transitorio, il che ha senso, ma idealmente credo che possa anche rispettare l'opzione downloadSourcesproprio come fa il plugin eclissi maven.
Si potrebbe usare la dipendenza: copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ) che prende un elenco di artefatti definiti nella sezione di configurazione del plugin e li copia in una posizione specificata , rinominandoli o rimuovendo la versione se lo si desidera. Questo obiettivo può risolvere gli artefatti dai repository remoti se non esistono nel repository locale o nel reattore.
Non tutte le proprietà del plugin potrebbero essere utilizzate nella CLI di Maven. È possibile specificare le proprietà con la proprietà "Proprietà utente:". Nell'esempio seguente sto scaricando junit nella mia cartella temp e rimuovendo la vesione dal file jar.
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true
dove artefatto = junit: junit: 4.11 sono le coordinate di Maven. E specifichi artifcat come groupId: artifactId: version [: packaging [: classifier]]
(Grazie a Pascal Thivent per aver fornito il suo https://stackoverflow.com/a/18632876/2509415 in primo luogo. Sto aggiungendo un'altra risposta)
un liner per scaricare l'ultimo manufatto maven senza 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"
L'utilizzo dalla documentazione ufficiale:
https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency:get
Per il mio caso, vedi la risposta qui sotto:
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=.
Utilizzare il comando "mvn dependency: get" per scaricare specifici aritfact e utilizzare il comando "mvn dependency: copy" per copiare l'artefatto scaricato in dir dir "-DoutputDirectory"
Ecco un esempio per ottenere ASM-7 usando Maven 3.6:
mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar
Oppure puoi scaricare il vaso da qui: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm e quindi
mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar
Il comando:
mvn install:install-file
In genere installa l'artefatto nel tuo repository locale, quindi non dovresti scaricarlo. Tuttavia, se desideri condividere il tuo artefatto con altri, dovrai distribuire l'artefatto in un repository centrale, vedi il plugin di distribuzione per maggiori dettagli.
Inoltre, l'aggiunta di una dipendenza al POM recupererà automaticamente tutti gli artefatti di terze parti necessari durante la creazione del progetto. Vale a dire questo scaricherà l'artefatto dal repository centrale.