Pamiętaj, że wtyczka chce „repoUrl”, mimo że dokumentacja mówi „repositoryUrl”. To może doprowadzić cię do szaleństwa, tak jak mnie!
zakmck
Dokumentacja ( maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html ) pokazuje zarówno parametry xml (<repositoryUrl> ... </repositoryUrl>), jak i właściwości użytkownika wiersza poleceń (mvn .. . -DrepoUrl = "..."). Ten konkretny przykład jest przestarzały, więc nie martw się; teraz jest teraz jednolicie zdalneRepozytoria (w obu zastosowaniach); ale pamiętaj, że parametr „destination” jest właściwością użytkownika „-Ddest = ...”; np. => 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)
Aby upewnić się, że dependency:getcel został znaleziony , musisz wyraźnie powiedzieć mavenowi, aby używał wersji 2.1, tj. Musisz użyć w pełni kwalifikowanej nazwy wtyczki, w tym wersji:
AKTUALIZACJA: Ze starszymi wersjami Mavena (przed 2.1) możliwe jest dependency:getnormalne działanie (bez używania w pełni kwalifikowanej nazwy i wersji) poprzez wymuszenie na kopii mavena korzystania z danej wersji wtyczki.
Można to zrobić w następujący sposób:
1. Dodaj następujący wiersz w <settings>elemencie ~/.m2/settings.xmlpliku:
Ale to już nie działa z maven 2.1 / 2.2. W rzeczywistości, zgodnie z wprowadzeniem do rejestru wtyczek , funkcje wtyczkiplugin-registry.xml zostały przeprojektowane (w celu zapewnienia przenośności), a rejestr wtyczek jest obecnie w stanie półśpiącym w Maven 2 . Więc myślę, że na razie musimy użyć długiej nazwy (gdy używamy wtyczki bez pom, co jest pomysłem dependency:get).
Tak, i właśnie otrzymałem tę samą rozdzielczość, używając zależności: zdobądź cel. Zależność mvn: get -Dartifact = org.apache.archiva: archiva-webapp: LATEST: war -DrepoUrl = repository.sonatype.org/content/repositories/central Jedyną niedogodnością jest to, że muszę podać opcję repoUrl. Twoje informacje naprawdę pomagają, używam mvn 2.2.1 (rdebian-1) i nie dotknąłem wtyczkiRegistry. Dzięki.
Xiè Jìléi
2
ten cel „get” wydaje się znowu „po prostu działać” (nie jest wymagana dodatkowa konfiguracja / hakowanie; wtyczka 2.5.1, mvn 3.0.4): = 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
michael
Jaka jest różnica między get a install? Czy obaj nie przenoszą się do lokalnego repozytorium Maven? --edit: czekaj, nie, teraz rozumiem; install jest dla twojego lokalnego deps do skopiowania do lokalnego repozytorium m2, get pobiera je z pilota.
(Dzięki Pascalowi Thiventowi za udzielenie wspaniałej odpowiedzi w pierwszej kolejności. Dodam kolejną odpowiedź, ponieważ nie zmieściłaby się w komentarzu i byłaby zbyt obszerna, aby ją edytować.)
Użyłem tego do pobrania archetypu mavena. Działa to świetnie, jeśli jesteś za proxy i pracujesz z eclipse, które nie rejestruje się w celu identyfikacji archtypów maven, mimo że skonfigurowałeś proxy w ustawieniach xml.
Acewin,
mvn org.apache.maven.plugins: maven-dependency-plugin: 2.8: get -Dartifact = org.apache.maven.archetypes: maven-archetype-webapp: 1.0: jar
Acewin
Czy możesz wyjaśnić, co jar:sourcesoznacza / robi? dlaczego musisz określić „jar”? i czy „źródła” oznaczają, że pobierze dodatkowe zależności wymagane przez artefakt?
czerwony888
„jar” to rodzaj opakowania, „źródła” to klasyfikator. Biorąc pod uwagę jedną zależność (na przykład hibernate-core ), może istnieć więcej niż jeden artefakt. Często są to: 1. biblioteka tylko binarna, 2. sourcesplik JAR zawierający tylko źródła Java, 3. plik JAR zawierający tylko javadocdokumenty API. Zobacz też: Domyślne programy obsługi artefaktów Mavena .
Danilo Piazzalunga
Dziękuję za wyjaśnienie, jak [:classifier]poprawnie używać , jeśli mam utworzony przez wtyczkę assemlby plik zip, który chcę pobrać.
jonashackt
43
Oto, co zadziałało, gdy pobrałem najnowszą wersję artefaktu o nazwie „component.jar” wraz z Mavenem 3.1.1 (inne sugestie nie zadziałały, głównie z powodu zmian w wersji mavena)
To faktycznie pobiera plik i kopiuje go do lokalnego katalogu roboczego
Wielkie dzięki! Nie potrzebowałem zdarzenia -DrepoUrl, myślę, że i tak wynikało to z mojego pom. Również nie używałem -Ddestjak ja faktycznie nie chce go ściągnąć do regularnego .m2katalogu.
yair
15
destParametr jest przestarzała i może być zastąpiony invokation dnia copypo gettak: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.(w tym przypadku wprowadzania słoik w katalogu roboczym).
Jacob Raihle
@JacobRaihle Wtedy nie mogę pobrać plik bez pom.xml, otrzymuję następujący błąd: Goal requires a project to execute but there is no POM in this directory.
Athlan
2
Przypuszczam, że @Athlan No-pom support może być nowszą funkcją. Obecnie mogę po prostu biegać mvn dependency:copy(bez dependency:getwcześniejszego).
Jacob Raihle
26
Jeśli chodzi o to, jak uzyskać plik binarny artefaktu, odpowiedź Pascala Thiventa brzmi , ale aby uzyskać także słoik źródeł artefaktu, możemy użyć:
To działa, ponieważ artifactparametr w rzeczywistości składa się z groupId:artifactId:version[:packaging][:classifier]. Tylko opakowanie i klasyfikator są opcjonalne.
Dzięki jarza opakowanie i sourcesjako klasyfikatora , wtyczki Maven zależność rozumie pytamy o słoiku źródeł nie słoiku artefakt.
Niestety na razie pliki jar źródeł nie mogą być pobierane przejściowo, co ma sens, ale uważam, że może również uwzględniać tę opcję, downloadSourcestak jak robi to wtyczka maven eclipse.
Można by użyć zależności: copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ), która pobiera listę artefaktów zdefiniowanych w sekcji konfiguracyjnej wtyczki i kopiuje je do określonej lokalizacji , zmieniając ich nazwy lub usuwając wersję, jeśli to konieczne. Ten cel może rozwiązać problem artefaktów ze zdalnych repozytoriów, jeśli nie istnieją one ani w repozytorium lokalnym, ani w reaktorze.
Nie wszystkie właściwości wtyczki można było wykorzystać w maven CLI. Można określić właściwości, które mają zdefiniowaną właściwość „Właściwość użytkownika:”. W poniższym przykładzie pobieram junit do mojego folderu tymczasowego i usuwam wersję z pliku jar.
Zazwyczaj instaluje artefakt w lokalnym repozytorium, więc nie powinieneś go pobierać. Jeśli jednak chcesz udostępnić swój artefakt innym, musisz wdrożyć artefakt w centralnym repozytorium, patrz wtyczka do wdrażania, aby uzyskać więcej informacji.
Dodatkowo dodanie zależności do POM spowoduje automatyczne pobranie wszelkich artefaktów innych firm, których potrzebujesz podczas tworzenia projektu. Tj. Spowoduje to pobranie artefaktu z centralnego repozytorium.
Odpowiedzi:
Możesz użyć wtyczki zależności maven, która ma niezły
dependency:get
cel od wersji 2.1. Nie potrzebujesz pom, wszystko dzieje się w linii poleceń.Aby upewnić się, że
dependency:get
cel został znaleziony , musisz wyraźnie powiedzieć mavenowi, aby używał wersji 2.1, tj. Musisz użyć w pełni kwalifikowanej nazwy wtyczki, w tym wersji:AKTUALIZACJA: Ze starszymi wersjami Mavena (przed 2.1) możliwe jest
dependency:get
normalne działanie (bez używania w pełni kwalifikowanej nazwy i wersji) poprzez wymuszenie na kopii mavena korzystania z danej wersji wtyczki.Można to zrobić w następujący sposób:
1. Dodaj następujący wiersz w
<settings>
elemencie~/.m2/settings.xml
pliku:2. Dodaj plik
~/.m2/plugin-registry.xml
o następującej zawartości:Ale to już nie działa z maven 2.1 / 2.2. W rzeczywistości, zgodnie z wprowadzeniem do rejestru wtyczek , funkcje wtyczki
plugin-registry.xml
zostały przeprojektowane (w celu zapewnienia przenośności), a rejestr wtyczek jest obecnie w stanie półśpiącym w Maven 2 . Więc myślę, że na razie musimy użyć długiej nazwy (gdy używamy wtyczki bez pom, co jest pomysłemdependency:get
).źródło
:jar:sources
do artefaktu , patrz stackoverflow.com/a/31109185/537554mvn dependency:get -Dartifact=group-id:artefact-id:version
Dzięki najnowszej wersji (2.8) wtyczki Maven Dependency , pobranie artefaktu z Maven Central Repository jest tak proste, jak:
gdzie
groupId:artifactId:version
itd. są współrzędne MavenPrzykład przetestowany z Maven 2.0.9, Maven 2.2.1 i Maven 3.0.4:
(Dzięki Pascalowi Thiventowi za udzielenie wspaniałej odpowiedzi w pierwszej kolejności. Dodam kolejną odpowiedź, ponieważ nie zmieściłaby się w komentarzu i byłaby zbyt obszerna, aby ją edytować.)
źródło
jar:sources
oznacza / robi? dlaczego musisz określić „jar”? i czy „źródła” oznaczają, że pobierze dodatkowe zależności wymagane przez artefakt?sources
plik JAR zawierający tylko źródła Java, 3. plik JAR zawierający tylkojavadoc
dokumenty API. Zobacz też: Domyślne programy obsługi artefaktów Mavena .[:classifier]
poprawnie używać , jeśli mam utworzony przez wtyczkę assemlby plik zip, który chcę pobrać.Oto, co zadziałało, gdy pobrałem najnowszą wersję artefaktu o nazwie „component.jar” wraz z Mavenem 3.1.1 (inne sugestie nie zadziałały, głównie z powodu zmian w wersji mavena)
To faktycznie pobiera plik i kopiuje go do lokalnego katalogu roboczego
Od basha:
źródło
-DrepoUrl
, myślę, że i tak wynikało to z mojego pom. Również nie używałem-Ddest
jak ja faktycznie nie chce go ściągnąć do regularnego.m2
katalogu.dest
Parametr jest przestarzała i może być zastąpiony invokation dniacopy
poget
tak:mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.
(w tym przypadku wprowadzania słoik w katalogu roboczym).Goal requires a project to execute but there is no POM in this directory
.mvn dependency:copy
(bezdependency:get
wcześniejszego).Jeśli chodzi o to, jak uzyskać plik binarny artefaktu, odpowiedź Pascala Thiventa brzmi , ale aby uzyskać także słoik źródeł artefaktu, możemy użyć:
na przykład
To działa, ponieważ
artifact
parametr w rzeczywistości składa się zgroupId:artifactId:version[:packaging][:classifier]
. Tylko opakowanie i klasyfikator są opcjonalne.Dzięki
jar
za opakowanie isources
jako klasyfikatora , wtyczki Maven zależność rozumie pytamy o słoiku źródeł nie słoiku artefakt.Niestety na razie pliki jar źródeł nie mogą być pobierane przejściowo, co ma sens, ale uważam, że może również uwzględniać tę opcję,
downloadSources
tak jak robi to wtyczka maven eclipse.źródło
Można by użyć zależności: copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ), która pobiera listę artefaktów zdefiniowanych w sekcji konfiguracyjnej wtyczki i kopiuje je do określonej lokalizacji , zmieniając ich nazwy lub usuwając wersję, jeśli to konieczne. Ten cel może rozwiązać problem artefaktów ze zdalnych repozytoriów, jeśli nie istnieją one ani w repozytorium lokalnym, ani w reaktorze.
Nie wszystkie właściwości wtyczki można było wykorzystać w maven CLI. Można określić właściwości, które mają zdefiniowaną właściwość „Właściwość użytkownika:”. W poniższym przykładzie pobieram junit do mojego folderu tymczasowego i usuwam wersję z pliku jar.
gdzie artifact = junit: junit: 4.11 to współrzędne maven. I określasz artifcat jako groupId: artifactId: wersja [: opakowanie [: klasyfikator]]
(W pierwszej kolejności podziękowania dla Pascala Thiventa za udostępnienie https://stackoverflow.com/a/18632876/2509415. Dodaję kolejną odpowiedź)
źródło
jedna linijka do pobrania najnowszego artefaktu Mavena bez mvn:
źródło
Wykorzystanie z oficjalnej dokumentacji:
W moim przypadku zobacz odpowiedź poniżej:
Użyj polecenia „mvn dependency: get”, aby pobrać określony dokument i użyj polecenia „mvn dependency: copy”, aby skopiować pobrany artefakt do katalogu docelowego „-DoutputDirectory”
źródło
Oto przykład, jak uzyskać ASM-7 za pomocą Maven 3.6:
Lub możesz pobrać słoik stąd: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm, a następnie
źródło
Komenda:
Zazwyczaj instaluje artefakt w lokalnym repozytorium, więc nie powinieneś go pobierać. Jeśli jednak chcesz udostępnić swój artefakt innym, musisz wdrożyć artefakt w centralnym repozytorium, patrz wtyczka do wdrażania, aby uzyskać więcej informacji.
Dodatkowo dodanie zależności do POM spowoduje automatyczne pobranie wszelkich artefaktów innych firm, których potrzebujesz podczas tworzenia projektu. Tj. Spowoduje to pobranie artefaktu z centralnego repozytorium.
źródło
LATEST
jest przestarzały, spróbuj z zakresem[,)
źródło