Belirli bir Maven yapısını tek bir komut satırında nasıl indirebilirim?


168

Bir yapı yükleyebilirim install:install-file, ancak bir yapı nasıl indirebilirim?

Örneğin:

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

11
'RepositoryUrl' yazan belgelere rağmen eklentinin 'repoUrl' istediğini unutmayın. Bana yaptığı gibi u deli sürücü olabilir!
zakmck

dokümanlar ( maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html ) hem xml parametrelerini (<repositoryUrl> ... </repositoryUrl>) hem de komut satırı kullanıcı özelliklerini (mvn .. . -DrepoUrl = "..."). Bu özel örnek kullanımdan kaldırılmıştır, bu yüzden endişelenmeyin; şimdi tekdüze uzaktırRepositories (her iki kullanımda); ancak "destination" parametresinin "-Ddest = ..." kullanıcı özelliği olduğunu unutmayın; örneğin = mvn org.apache.maven.plugins: maven-bağımlılık-eklentisi: 2.5.1: get -DremoteRepositories = repo.maven.apache.org -Dartifact = org.apache.ant: ant: 1.8.1 -Ddest = ant-1.8.1.jar (sonuç: ant-1.8.1.jar geçerli dizinde)
michael

Yanıtlar:


182

2.1 sürümünden bu yana güzel bir hedefi olan maven bağımlılık eklentisini kullanabilirsiniz dependency:get. Pom'a gerek yok, her şey komut satırında gerçekleşiyor.

dependency:getHedefi bulacağınızdan emin olmak için , maven'e 2.1 sürümünü kullanmasını açıkça söylemeniz gerekir, yani sürüm dahil eklentinin tam adını kullanmanız gerekir:

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

GÜNCELLEME: Maven'in eski sürümlerinde (2.1'den önce), dependency:getmaven kopyanızı belirli bir eklentinin belirli bir sürümünü kullanmaya zorlayarak normal şekilde (tam adı ve sürümü kullanmadan) çalıştırmak mümkündür .

Bu şöyle yapılabilir:

1. Dosyanızın <settings>öğesine şu satırı ekleyin ~/.m2/settings.xml:

<usePluginRegistry>true</usePluginRegistry>

2. ~/.m2/plugin-registry.xmlAşağıdaki içeriklere sahip dosyayı ekleyin :

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

Ama bu artık maven 2.1 / 2.2 ile çalışmıyor gibi görünüyor. Aslında, Eklenti Kaydına Giriş'e göre , özelliklerinin plugin-registry.xmlyeniden tasarlandığı (taşınabilirlik için) ve eklenti kayıt defteri şu anda Maven 2 içinde yarı uyuyan bir durumda . Bu yüzden şimdilik uzun ismi kullanmamız gerektiğini düşünüyorum (eklentiyi pom olmadan kullanıyoruz, bu da arkasındaki fikir dependency:get).


1
Evet, bağımlılığı kullanarak aynı çözümü aldım: hedef alın. mvn bağımlılığı: get -Dartifact = org.apache.archiva: archiva-webapp: SON: savaş -DrepoUrl = repository.sonatype.org/content/repositories/central Tek rahatsızlık, bir repoUrl seçeneği sunmam gerektiğidir. Bilgileriniz gerçekten yardımcı oluyor, mvn 2.2.1 (rdebian-1) kullanıyorum ve pluginRegistry'e dokunmadım. Teşekkürler.
Xiè Jìléi

2
bu "get" hedefi tekrar "sadece çalışıyor" gibi görünüyor (ek yapılandırma / hackleme gerekmez; eklenti 2.5.1, mvn 3.0.4): = example => mvn org.apache.maven.plugins: maven-bağımlılık-eklentisi: 2.5.1: -DremoteRepositories = repo.maven.apache.org -Dartifact = org.apache.ant: ant: 1.8.1 -Ddest = ant-1.8.1.jar
michael

Get ve install arasındaki fark nedir? İkisi de yerel maven deponuza gelmiyor mu? --edit: bekle, hayır, şimdi anladım; için yüklemek için yerel deps yerel m2 repo kopyalanacak uzaktan veya getirmeler onları.
Chris2048

4
o sadece ekleme bulundu :jar:sourcesüzere eser , bkz stackoverflow.com/a/31109185/537554
ryenus

1
Maven'in daha yeni sürümleriyle (örn. 3.6.0) hala bunu yapabilirsinizmvn dependency:get -Dartifact=group-id:artefact-id:version
scrutari

93

Maven Dependency Plugin'in en son sürümü (2.8) ile Maven Central Repository'den bir eser indirmek şu kadar basit:

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

Maven koordinatları nerede groupId:artifactId:versionvs.

Maven 2.0.9, Maven 2.2.1 ve Maven 3.0.4 ile test edilmiş bir örnek:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=org.hibernate:hibernate-entitymanager:3.4.0.GA:jar:sources

( İlk etapta harika cevabını verdiği için Pascal Thivent'e teşekkürler . Başka bir cevap ekliyorum, çünkü bir yoruma uymayacak ve bir düzenleme için çok geniş olacaktır.)


Bunu maven arketipini indirmek için kullandım. Proxy'nin arkasındaysanız ve xml ayarlarında proxy yapılandırmış olsanız bile maven archtypes'i tanımlamak için kayıt yapamayan eclipse ile çalışıyorsanız bu harika çalışır.
Acewin

mvn org.apache.maven.plugins: maven-bağımlılık-eklentisi: 2.8: get -Dartifact = org.apache.maven.archetypes: maven-archetype-webapp: 1.0: kavanoz
Acewin

Ne jar:sourcesanlama geldiğini / ne anlama geldiğini açıklayabilir misiniz ? neden "kavanoz" belirtmeniz gerekiyor? ve "kaynaklar", yapının gerektirdiği ek bağımlılıkları indireceği anlamına mı geliyor?
red888

"kavanoz" ambalaj türüdür, "kaynaklar" sınıflandırıcıdır. Bir bağımlılık (örneğin, hazırda bekletme çekirdeği ) göz önüne alındığında , birden fazla eser olabilir. Genellikle vardır: 1. yalnızca ikili kitaplık, 2. sources, yalnızca Java kaynaklarını içeren bir JAR dosyası, 3. javadoc, yalnızca API belgelerine sahip bir JAR dosyası. Ayrıca bkz: Maven Varsayılan Artefakt İşleyicileri .
Danilo Piazzalunga

[:classifier]İndirmek istediğim bir assemlby eklentisi oluşturulan zip dosyası varsa , doğru kullanmayı açıklayan hakkında teşekkür ederiz .
jonashackt

43

İşte sonunda Maven 3.1.1 ile "component.jar" adlı bir eserin en son sürümünü indirmek için benim için çalıştı (diğer öneriler, çoğunlukla inanıyorum maven sürüm değişiklikleri nedeniyle)

Bu aslında dosyayı indirir ve yerel çalışma dizinine kopyalar

Bash'den:

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

Çok teşekkürler! Olay ihtiyacım yoktu -DrepoUrl, sanırım yine de pom dan ima edildi. Ayrıca kullandığım vermedi -DdestAslında olarak yaptığımız düzenli indirmek istediğiniz .m2dizine.
yair

15
destParametre kaldırıldı ve bir invokation ile ikame edilmiş olabilir copysonra getşöyle: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.(çalışma dizininde kavanoz yerleştirerek bu durumda).
Jacob Raihle

@JacobRaihle Sonra aşağıdaki hatayı alıyorum, pom.xml olmadan dosya indiremezsiniz: Goal requires a project to execute but there is no POM in this directory.
Athlan

2
Sanırım No-pom desteği daha yeni bir özellik olabilir. Bugünlerde koşabilirim mvn dependency:copy( dependency:getilk olmadan ).
Jacob Raihle

26

Artefakt ikiliğini nasıl alacağınıza gelince, Pascal Thivent'in cevabı budur, ancak artefakt kaynakları kavanozunu almak için şunları kullanabiliriz:

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

Örneğin

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

Bu, artifactparametre gerçekte oluştuğu için çalışır groupId:artifactId:version[:packaging][:classifier]. Sadece ambalaj ve sınıflandırıcı isteğe bağlıdır.

İle jarolduğu gibi ambalaj ve sourcessıra sınıflandırıcı , maven bağımlılık eklenti biz kaynaklar kavanoz değil, yapay kavanoz için soruyorsun anlar.

Ne yazık ki şimdilik kaynaklar jar dosyaları geçici olarak indirilemiyor, bu da mantıklı, ama ideal downloadSourcesolarak maven eclipse eklentisinin yaptığı gibi seçeneğe de saygı gösterebileceğine inanıyorum .


17

Bağımlılık kullanılabilir: eklenti yapılandırma bölümünde tanımlanan eserlerin bir listesini alan ve bunları belirtilen bir konuma kopyalayan copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ). , yeniden adlandırma veya istenirse sürümü sıyırma. Bu amaç, yerel depoda veya reaktörde bulunmuyorsa uzak depolardaki yapay nesneleri çözebilir.

Eklentinin tüm özellikleri maven CLI'de kullanılamaz. "User Property:" özelliği tanımlanmış özellikler belirlenebilir. Aşağıdaki örnekte tempit'ime junit indiriyorum ve jar dosyasından vesionu soyuyorum.

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

burada artefakt = junit: junit: 4.11 maven koordinatlarıdır. Ve artifcat'i groupId: artifactId: version [: packing [: classifier]] olarak belirtirsiniz.

( İlk başta https://stackoverflow.com/a/18632876/2509415 adresini sağladığı için Pascal Thivent'e teşekkürler . Başka bir cevap ekliyorum)


11

mvn olmadan son maven eser indirmek için bir astar:

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"

3
Downvoted. Bu çözüm yalnızca belirli bir depo ürünüyle çalışıyor gibi görünüyor.
Martín Straus

1
Nexus 2.x ile harika çalıştı, 3.x ile çalışmadı (henüz)
HDave

kıvırmak: seçenek -J bilinmiyor
xuehui

2

Resmi belgelerden kullanım:

https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency:get

Benim durumum için aşağıdaki cevaba bakınız:

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=.

Belirli aritfaktı indirmek için "mvn bağımlılık: get" komutunu kullanın ve indirilen eseri dest dizinine kopyalamak için "mvn bağımlılık: kopyala" komutunu kullanın "-DoutputDirectory"


1

Maven 3.6'yı kullanarak ASM-7'yi almak için bir örnek:

mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar

Veya kavanozu buradan indirebilirsiniz: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm ve sonra

mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar

0

Komuta:

mvn install:install-file 

Genellikle eseri yerel deponuza yükler , bu yüzden indirmenize gerek yoktur. Ancak, eserinizi başkalarıyla paylaşmak istiyorsanız, eseri merkezi bir depoya dağıtmanız gerekir . Daha fazla ayrıntı için konuşlandırma eklentisine bakın.

Ayrıca POM'nize bir bağımlılık eklemek , projenizi oluştururken ihtiyacınız olan üçüncü taraf yapay nesneleri otomatik olarak getirecektir. Yani bu, merkezi depodan yapay nesneyi indirecektir.


0

LATEST kullanımdan kaldırıldı, aralık ile deneyin [,)

./mvnw org.apache.maven.plugins:maven-dependency-plugin:3.1.1:get \  
-DremoteRepositories=repoId::default::https://nexus/repository/maven-releases/ \
"-Dartifact=com.acme:foo:[,)"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.