Prosty wiersz poleceń do pobrania zdalnego artefaktu maven2 do lokalnego repozytorium?

124

Mam bibliotekę, którą rozpowszechniam za pomocą mavena 2. Typowy użytkownik tej biblioteki nie używa mavena do tworzenia swoich aplikacji, ale prawdopodobnie jest trochę zaznajomiony z mavenem i prawdopodobnie ma go zainstalowanego.

Chciałbym udokumentować „proste” jedno wierszowe polecenie, którego mogą użyć do pobrania artefaktów mojej biblioteki do lokalnego, ~/.m2/repositorybez konieczności konfigurowania w tym celu pliku pom.xml.

Myślałem, że istnieje sposób, aby to zrobić, ale nie mogę go znaleźć po przejrzeniu dokumentacji wtyczki install:install-filei dependency. Próbowałem takich rzeczy jak:

mvn install:install-file -DrepositoryId=java.net -Durl=http://download.java.net/maven/2/ -Dfile=robo-guice-0.4-20091121.174618-1.jar -DpomFile=robo-guice-0.4-20091121.174618-1.pom -DgroupId=robo-guice -DartifactId=robo-guice -Dversion=0.4-SNAPSHOT -Dpackaging=jar

ale wydaje mi się, że szczekam niewłaściwe drzewo, ponieważ wydaje się, że wtyczka instalacyjna jest używana do kopiowania lokalnie wbudowanych plików do lokalnego repozytorium, zamiast pobierania zdalnych artefaktów do lokalnego repozytorium.

To jest artefakt, który chcę zainstalować: http://download.java.net/maven/2/robo-guice/robo-guice/0.4-SNAPSHOT/

Czy jest to możliwe przy użyciu Mavena?

emmby
źródło

Odpowiedzi:

169

Od wersji 2.1 wtyczki Maven Dependency Plugin istnieje zależność: pobierz cel w tym celu. Aby upewnić się, że używasz właściwej wersji wtyczki, musisz użyć „w pełni kwalifikowanej nazwy”:

mvn org.apache.maven.plugins: maven-dependency-plugin: 2.1: get \
    -DrepoUrl = http: //download.java.net/maven/2/ \
    -Dartifact = robo-guice: robo-guice: 0,4-SNAPSHOT
Pascal Thivent
źródło
Dodatkowa pomoc w pokazaniu, jak zainstalować samą wtyczkę zależności.
Sergio Acosta
2
Pascal, czy możesz mi powiedzieć, jak zdefiniować użytkownika i hasło, aby uzyskać dostęp do repozytorium? Sztuczka z użytkownikiem: hasło @ repourl nie zadziałała.
Gábor Lipták
4
cel jest fajny, ale jak mogę zdefiniować katalog docelowy, do którego plik ma zostać skopiowany? (i nazwa pliku)
domi
9
@domi (spóźniona odpowiedź dla potomnych): użyj "-Ddest = ścieżka / do / my.jar"; w przeciwnym razie jest po prostu kopiowany do lokalnego ~ / .m2 / repozytorium (sprawia, że ​​wygląda na to, że nic się nie stało). Zobacz maven.apache.org/plugins/maven-dependency-plugin/… = 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 (wynik: ant-1.8.1.jar w bieżącym katalogu)
michael
3
Dzięki! Natomiast w opublikowanym przez Ciebie łączu do dokumentu jest Deprecated. Use remoteRepositoriesdla repoUrl. Może zaktualizuj odpowiedź :)
Weekend
47

Daj im trywialny pom z tymi słoikami wymienionymi jako zależności i instrukcje do uruchomienia:

mvn dependency:go-offline

Spowoduje to ściągnięcie zależności do lokalnego repozytorium.

Bardziej bezpośrednim rozwiązaniem jest zależność: get , ale jest dużo argumentów do wpisania:

mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version
bmargulies
źródło
Dobry pomysł, chociaż wiersz poleceń, który mogliby kopiować i wklejać, byłby łatwiejszy
emmby
Gdybym mógł coś wymyślić, opublikowałbym go. Nie znam żadnej wtyczki, która robi to, czego się oczekuje. Wiem, jak napisać jeden ...
bmargulies
getMojo rzeczywiście spodziewa -DrepoUrlsię być obecny, nie -DrepositoryUrl. Jeśli chodzi o argumenty do wpisania, nie ma magii, musisz podać te informacje w taki czy inny sposób.
Pascal Thivent
W moim pierwszym schemacie użytkownik końcowy wpisuje tylko trzy znaki: mvn. Cała reszta jest wykonywana przez op.
bmargulies
22

Począwszy od wersji 2.4 wtyczki Maven Dependency Plugin , można także zdefiniować miejsce docelowe artefaktu, używając flagi -Ddest. Powinien wskazywać na nazwę pliku (nie katalog) dla artefaktu docelowego. Zobacz stronę parametrów, aby uzyskać dodatkowe parametry, których można użyć

mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get \
    -DremoteRepositories=http://download.java.net/maven/2 \
    -Dartifact=robo-guice:robo-guice:0.4-SNAPSHOT \
    -Ddest=c:\temp\robo-guice.jar
Eric B.
źródło
2
Dzięki! -Ddest jest oznaczony jako przestarzały. Czy jest nowe rozwiązanie?
Dimath
1
Użyj zależności: zamiast tego skopiuj cel. maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html
Eric B.
3
cel kopiowania nie kopiuje plików przechodnich.
Renato