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?



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

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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.