Mogę zainstalować artefakt przez install:install-file
, ale jak mogę pobrać artefakt?
Na przykład:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Mogę zainstalować artefakt przez install:install-file
, ale jak mogę pobrać artefakt?
Na przykład:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
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:
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 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:
<usePluginRegistry>true</usePluginRegistry>
2. Dodaj plik ~/.m2/plugin-registry.xml
o następującej zawartoś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 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
).
:jar:sources
do artefaktu , patrz stackoverflow.com/a/31109185/537554
mvn 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:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]]
gdzie groupId:artifactId:version
itd. są współrzędne Maven
Przykład przetestowany 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 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ć.)
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 tylko javadoc
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:
mvn dependency:get \
-DrepoUrl=http://.../ \
-Dartifact=com.foo.something:component:LATEST:jar \
-Dtransitive=false \
-Ddest=component.jar \
-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 dnia copy
po get
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
(bez dependency: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ć:
mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources
na przykład
mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources
To działa, ponieważ artifact
parametr w rzeczywistości składa się z groupId:artifactId:version[:packaging][:classifier]
. Tylko opakowanie i klasyfikator są opcjonalne.
Dzięki jar
za opakowanie i sources
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.
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.
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true
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ź)
jedna linijka do pobrania najnowszego artefaktu Mavena 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"
Wykorzystanie z oficjalnej dokumentacji:
https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency:get
W moim przypadku zobacz odpowiedź poniżej:
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=.
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”
Oto przykład, jak uzyskać ASM-7 za pomocą Maven 3.6:
mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar
Lub możesz pobrać słoik stąd: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm, a następnie
mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar
Komenda:
mvn install:install-file
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.
LATEST
jest przestarzały, spróbuj z zakresem [,)
./mvnw org.apache.maven.plugins:maven-dependency-plugin:3.1.1:get \
-DremoteRepositories=repoId::default::https://nexus/repository/maven-releases/ \
"-Dartifact=com.acme:foo:[,)"