2009-12-13 20 views
108

mogę zainstalować artefaktu przez zainstalowanie: install-file, ale jak mogę pobrać wtedy, na przykład:Jak mogę pobrać konkretny artefakt Maven w jednym wierszu poleceń?

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

jakiś pomysł?

+8

Pamiętaj, że wtyczka chce "repoUrl", mimo że dokumentacja mówi "reositoryUrl". Może doprowadzić cię do szaleństwa, tak jak mnie! – zakmck

+0

dokumenty (http: //maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html) pokazuje zarówno parametry xml ( ...), jak i właściwości użytkowe wiersza poleceń (mvn ... -DrepoUrl = ".. . "). Ten konkretny przykład jest przestarzały, więc nie martw się; teraz jest teraz równomiernie zdalnym zbiorem (w obu zastosowaniach); ale zauważ, że parametr "miejsce docelowe" to własność użytkownika "-Ddest = ..."; eg => 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 -Dest = ant-1.8.1.jar (wynik: ant-1.8.1.jar w bieżącym katalogu) – michael

Odpowiedz

117

Możesz użyć maven dependency plugin, który ma ładny cel dependency:get od wersji 2.1. Nie ma potrzeby pom, wszystko dzieje się z linii poleceń.

Aby upewnić się, aby znaleźć cel dependency:get, trzeba wyraźnie powiedzieć Maven używać wersji 2.1, czyli trzeba użyć pełnej nazwy wtyczki, w tym wersji:

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

AKTUALIZACJA: Ze starszymi wersjami Mavena (przed 2.1) możliwe jest normalne uruchamianie dependency:get (bez używania pełnej nazwy i wersji) przez zmuszanie swojej kopii do używania danej wersji wtyczki.

Można to zrobić w następujący sposób:

1. Dodaj następujący wiersz w elemencie <settings> swojego pliku ~/.m2/settings.xml:

<usePluginRegistry>true</usePluginRegistry> 

2. Dodaj plik ~/.m2/plugin-registry.xml o następującej treści :

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

Ale to nie wydaje się już działać z maven 2.1/2.2. W rzeczywistości, zgodnie z Introduction to the Plugin Registry, funkcje plugin-registry.xml zostały przeprojektowane (dla przenośności), a rejestr wtyczek jest obecnie w stanie półprzymkniętym w obrębie Maven 2. Więc myślę, że musimy teraz używać długiej nazwy (gdy używamy wtyczki bez pom, która jest ideą dependency:get).

+1

Tak, i mam taką samą rozdzielczość za pomocą zależności: zdobądź bramkę. Zależność mvn: get -Dartifact = org.apache.archiva: archiva-webapp: NAJNOWSZE: war -DrepoUrl = http: //repository.sonatype.org/content/repositories/central/ Jedyną niedogodnością jest to, że muszę podaj opcję repoUrl. Twoje informacje naprawdę pomagają, używam mvn 2.2.1 (rdebian-1) i nie dotknąłem wtyczki. Dzięki. –

+2

ten "get" cel wydaje się "po prostu działać" ponownie (nie wymaga dodatkowej konfiguracji/hakowania; wtyczka 2.5.1, mvn 3.0.4): = example => mvn org.apache.maven.plugins: maven-dependency-plugin : 2.5.1: get -DremoteRepositories = http: //repo.maven.apache.org -Dartifact = org.apache.ant: mrówka: 1.8.1 -Dest = ant-1.8.1.jar – michael

+0

Jaka jest różnica między dostawą i zainstalować? Czy oboje nie przynoszą się do lokalnego repozytorium mavenów? --edit: czekaj, nie, rozumiem to teraz; Instalacja jest przeznaczona dla * twoich * lokalnych deps, które mają zostać skopiowane do lokalnego repozytorium m2, a następnie pobrać je z pilota. – Chris2048

0

Polecenie:

mvn install:install-file 

Zazwyczaj installs artefakt w lokalnym repozytorium, więc nie ma potrzeby, aby go pobrać. Jeśli jednak chcesz udostępnić swój artefakt innym, będziesz musiał rozmieścić artefakt w centralnym repozytorium, aby uzyskać więcej informacji na ten temat, patrz: deploy plugin.

Dodanie do POM Twojego obiektu dependency powoduje automatyczne pobranie artefaktów innych firm, które są potrzebne podczas tworzenia projektu. To znaczy. Spowoduje to pobranie artefaktu z centralnego repozytorium.

60

W najnowszej wersji (2.8) z Maven Dependency Plugin, pobierania artefaktu z repozytorium Maven Central jest tak proste, jak:

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

gdzie groupId:artifactId:version itp są Maven coordinates

Przykładem, przetestowane z Maven 2.0.9, Maven 2.2.1 i 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 

(Dzięki Pascal Thivent o ile jego wonderful answer w pierwszej kolejności dodaję kolejną odpowiedź, ponieważ nie pasuje w komentarzu i byłoby zbyt obszerne dla edycji.).

+0

Użyłem tego do pobrania maven archetyp. Działa to świetnie, jeśli jesteś za proxy i współpracujesz z eclipse, które nie rejestruje się w celu zidentyfikowania mavenów, nawet jeśli masz skonfigurowany serwer proxy w ustawieniach xml. – Acewin

+0

mvn org.apache.maven.plugins: maven-dependency-plugin: 2.8: get -Dartifact = org.apache.maven.archetypes: maven-archetype-webapp: 1.0: słoik – Acewin

22

Oto co pracował dla mnie, aby pobrać najnowszą wersję artefaktu zwanego „component.jar” z maven 3.1.1 w końcu (inne propozycje nie, głównie ze względu na zmiany w wersji maven wierzę)

ten faktycznie pobiera plik i kopiuje go do lokalnego katalogu roboczego

Od bash:

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

Pracował także dla mnie - dzięki. Maven 3.3.3 – akauppi

+0

Świetnie, dzięki! Nie potrzebowałem zdarzenia "-DrepoUrl", tak myślę, że to było implikowane z mojego pom. Również nie użyłem '-Ddest', ponieważ faktycznie * zrobiłem * chcę go pobrać do zwykłego katalogu' .m2'. – yair

+2

Parametr "dest" [jest przestarzały] (http://maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html#destination) i można go zastąpić wywołaniem ['copy' ] (http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html) po 'get': so:' mvn dependency: copy -Dartifact = com.foo.something: component: NAJNOWSZE : jar -DoutputDirectory =. "(w tym przypadku umieszczenie słoika w katalogu roboczym). –

9

jedną wkładką ściągnąć najnowszą artefaktu maven bez 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" 
+0

Rewizja. To rozwiązanie wydaje się działać tylko z określonym produktem repozytorium. –

+0

Działa świetnie z Nexusem 2.x, nie działa z 3.x (jeszcze) – HDave

+0

curl: opcja -J jest nieznana – xuehui

6

Jeden przydałby Zależność: copy (http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html), która pobiera listę artefaktów zdefiniowany w konfiguracji wtyczki sekcji i kopiuje je do określonej lokalizacji, zmieniając ich nazwy lub usuwając wersję, jeśli jest to pożądane. Ten cel może rozwiązać artefakty ze zdalnych repozytoriów, jeśli nie istnieją one ani w lokalnym repozytorium, ani w reaktorze.

Nie wszystkie właściwości wtyczki mogą być używane w CLI maven. Można określić właściwości, które mają zdefiniowaną właściwość "User Property:". W poniższym przykładzie pobieram junit do mojego folderu tymczasowego i usuwam vesion z pliku jar.

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

gdzie artefakt = JUnit: JUnit: 4.11 ma współrzędne Maven. I określić artifcat jak GroupID: artifactId: wersję [: pakowanie [: klasyfikator]]

(Dzięki Pascal Thivent za zapewnienie jego https://stackoverflow.com/a/18632876/2509415 w pierwszej kolejności dodaję kolejną odpowiedź.)

+0

Dzięki! Możesz także użyć "zależności mvn: copy ...". –

11

chodzi jak dojechać binarny artefakt, Pascal Thivent's answer chodzi, ale również uzyskać słoik źródeł artefakt, możemy użyć:

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

np

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

To działa, ponieważ parametr artifact faktycznie składa się z groupId:artifactId:version[:packaging][:classifier]. Tylko klasyfikatory i są opcjonalne.

Z jar jako pakowanie i sources jak klasyfikatora, wtyczki Maven zależność rozumie pytamy o słoiku źródeł nie słoiku artefakt.

Niestety obecnie pliki jar nie mogą być pobierane przejściowo, co ma sens, ale uważam, że może również respektować opcję downloadSources, podobnie jak maven eclipse.

Powiązane problemy