मैं एक कमांड लाइन में एक विशिष्ट मावेन कलाकृति कैसे डाउनलोड कर सकता हूं?


168

मैं एक कलाकृति स्थापित install:install-fileकर सकता हूं, लेकिन मैं एक कलाकृति कैसे डाउनलोड कर सकता हूं?

उदाहरण के लिए:

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

11
इस बात से सावधान रहें कि डॉक्यूमेंट 'रिपॉजिटरी' कहने के बावजूद प्लगइन 'रिपॉजिट' चाहता है। यह यू पागल हो सकता है जैसा कि यह मेरे लिए किया था!
ज़क्कम

डॉक्स ( maven.apache.org/plugins/maven-d dependency-plugin/get-mojo.html ) xml params (<repositoryUrl> ... </ repositoryUrl>> और कमांड-लाइन उपयोगकर्ता-गुण (mvn ..) दोनों दिखाता है .DrepoUrl = "...")। यह विशेष उदाहरण पदावनत है, इसलिए कोई चिंता नहीं; अब यह अब समान रूप से रिमोट रिपॉजिटरी (दोनों उपयोगों में) है; लेकिन ध्यान दें कि पैरामीटर "गंतव्य" उपयोगकर्ता संपत्ति "-डस्ट = ..." है; उदा => 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 (परिणाम: ant-1.8.1.jar वर्तमान निर्देशिका में)
michael

जवाबों:


182

आप मावेन निर्भरता प्लगइन का उपयोग कर सकते हैं जिसका dependency:getसंस्करण 2.1 से एक अच्छा लक्ष्य है। पोम की जरूरत नहीं, सब कुछ कमांड लाइन पर होता है।

dependency:getलक्ष्य को खोजने के लिए , आपको संस्करण 2.1 का उपयोग करने के लिए स्पष्ट रूप से मावेन को बताने की आवश्यकता है, अर्थात आपको संस्करण सहित प्लगइन के पूरी तरह से योग्य नाम का उपयोग करने की आवश्यकता है:

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

अद्यतन: मावेन के पुराने संस्करणों (2.1 से पहले) के साथ, dependency:getप्लगइन के दिए गए संस्करण का उपयोग करने के लिए मावेन की अपनी प्रतिलिपि को मजबूर करके सामान्य रूप से (पूरी तरह से योग्य नाम और संस्करण का उपयोग किए बिना) चलाना संभव है ।

इसे इस प्रकार किया जा सकता है:

1. <settings>अपनी ~/.m2/settings.xmlफ़ाइल के तत्व में निम्नलिखित पंक्ति जोड़ें :

<usePluginRegistry>true</usePluginRegistry>

2. ~/.m2/plugin-registry.xmlनिम्नलिखित सामग्री के साथ फ़ाइल जोड़ें :

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

लेकिन यह मावेन 2.1 / 2.2 के साथ अब काम नहीं करता है। दरअसल, प्लगिन रजिस्ट्री के परिचय के अनुसार , सुविधाओं plugin-registry.xmlको पुन: डिज़ाइन किया गया है (पोर्टेबिलिटी के लिए) और प्लगइन रजिस्ट्री वर्तमान में मावेन 2 के भीतर एक अर्ध-निष्क्रिय स्थिति में है । तो मुझे लगता है कि हमें अब लंबे नाम का उपयोग करना होगा (जब एक पोम के बिना प्लगइन का उपयोग करना, जो कि पीछे का विचार है dependency:get)।


1
हां, और मुझे केवल निर्भरता का उपयोग करके एक ही संकल्प मिला है: लक्ष्य प्राप्त करें। mvan निर्भरता: get -Dartifact = org.apache.archiva: archiva-webapp: नवीनतम: war -DrepoUrl = repository.sonatype.org/content/repositories/central केवल असुविधा यह है कि मुझे एक रिपॉउल ऑप्शन प्रदान करना चाहिए। आपकी जानकारी वास्तव में मदद करती है, मैं mvan 2.2.1 (rdebian-1) का उपयोग कर रहा हूं और मैंने pluginRegistry को स्पर्श नहीं किया है। धन्यवाद।
क्ले जेलेई

2
यह "प्राप्त" लक्ष्य फिर से "बस काम" लगता है (कोई अतिरिक्त कॉन्फ़िगरेशन / हैकिंग की आवश्यकता नहीं है; प्लगइन 2.5.1, mvan 3.0.4): = उदाहरण => 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

पाने और स्थापित करने में क्या अंतर है? क्या वे दोनों आपके स्थानीय मैवेन रेपो में नहीं आते? --edit: रुको, नहीं, मैं इसे अभी प्राप्त करता हूं; इंस्टॉल आपके स्थानीय डिपो के लिए स्थानीय एम 2 रेपो में कॉपी किए जाने के लिए है, उन्हें रिमोट से प्राप्त करें।
क्रिस 2048 17

4
पाया यह, बस संलग्न :jar:sourcesकरने के लिए विरूपण साक्ष्य , देख stackoverflow.com/a/31109185/537554
ryenus

1
मावेन के नए संस्करणों के साथ (जैसे 3.6.0) आप अभी भी इसे सिर्फmvn dependency:get -Dartifact=group-id:artefact-id:version
स्क्रूटरी

93

मावेन डिपेंडेंसी प्लगिन के नवीनतम संस्करण (2.8) के साथ , मावेन सेंट्रल रिपॉजिटरी से एक कलाकृति डाउनलोड करना उतना ही सरल है:

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

जहाँ groupId:artifactId:version, आदि मावेन निर्देशांक हैं

एक उदाहरण, मावेन 2.0.9, मावेन 2.2.1 और मावेन 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

( पहली जगह में अपना अद्भुत जवाब प्रदान करने के लिए पास्कल थिवेंट के लिए धन्यवाद । मैं एक और उत्तर जोड़ रहा हूं, क्योंकि यह एक टिप्पणी में फिट नहीं होगा और यह एक संपादन के लिए बहुत व्यापक होगा।)


मैंने इसका इस्तेमाल maven archetype को डाउनलोड करने के लिए किया। यह बहुत अच्छा काम करता है अगर आप प्रॉक्सी के पीछे हैं और ग्रहण के साथ काम कर रहे हैं जो maven द्वीपसमूह की पहचान करने के लिए रजिस्टर करने में विफल रहता है, भले ही आपने सेटिंग xml में प्रॉक्सी कॉन्फ़िगर किया हो।
ऐसविन

mvn org.apache.maven.plugins: maven-dependency-plugin: 2.8: get -Dartifact = org.apache.maven.archetypes: maven-archetype-webapp: 1.0: jar
Acewin

क्या आप jar:sourcesइसका मतलब समझा सकते हैं / क्या करते हैं? आपको "जार" निर्दिष्ट करने की आवश्यकता क्यों है? और "स्रोतों" का अर्थ है कि यह अतिरिक्त निर्भरता डाउनलोड करेगा जिसे कलाकृतियों की आवश्यकता है?
red888

"जार" पैकेजिंग प्रकार है, "स्रोत" क्लासिफायरियर है। एक निर्भरता (उदाहरण के लिए, हाइबरनेट-कोर ) को देखते हुए, एक से अधिक विरूपण साक्ष्य हो सकते हैं। अक्सर, वहाँ हैं: 1. द्विआधारी केवल पुस्तकालय, 2. sources, एक जावा फ़ाइल जिसमें केवल जावा स्रोत हैं, 3. javadoc, केवल एपीआई डॉक्स के साथ एक जार फ़ाइल। यह भी देखें: Maven डिफ़ॉल्ट विरूपण साक्ष्य हैंडलर
दानिलो पियाज़ालुंगा

यह स्पष्ट करने के बारे में धन्यवाद कि कैसे [:classifier]सही ढंग से उपयोग किया जाए , अगर मेरे पास एक एसेंबलबी प्लगइन है जो ज़िप फ़ाइल बनाया है जिसे मैं डाउनलोड करना चाहता हूं।
जोंशाकैट

43

यहाँ मेरे लिए काम किया है, जो कि अंत में मावेन 3.1.1 के साथ "Components.jar" नामक एक कलाकृतियों का नवीनतम संस्करण डाउनलोड करने के लिए है (अन्य सुझाव ज्यादातर मावेन संस्करण परिवर्तनों के कारण मुझे विश्वास नहीं हुआ)

यह वास्तव में फ़ाइल को डाउनलोड करता है और इसे स्थानीय कामकाजी निर्देशिका में कॉपी करता है

बैश से:

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

बहुत धन्यवाद! मुझे इसकी आवश्यकता नहीं थी -DrepoUrl, मुझे लगता है कि यह वैसे भी मेरे पोम से निहित था। इसके अलावा मैं इसका इस्तेमाल नहीं करता था -Ddestक्योंकि मैं वास्तव में इसे नियमित निर्देशिका में डाउनलोड करना चाहता था.m2
yair

15
destपैरामीटर बहिष्कृत हो गई है , और का एक invokation साथ बदला जा सकता copyके बाद getतो जैसे: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.(इस मामले में काम कर रहे निर्देशिका में जार रखने में)।
जैकब रायल

@JacobRaihle तो मैं pom.xml के बिना फ़ाइल डाउनलोड नहीं कर सकता, निम्न त्रुटि हो रही है Goal requires a project to execute but there is no POM in this directory:।
एथलन

2
@ एथन नो-पोम सपोर्ट एक नई सुविधा हो सकती है, मुझे लगता है। आजकल मैं सिर्फ mvn dependency:copy(बिना dependency:getपहले) दौड़ सकता हूं ।
जैकब रायल

26

विरूपण साक्ष्य द्विआधारी प्राप्त करने के बारे में, पास्कल थिवेंट का जवाब है, लेकिन यह भी विरूपण साक्ष्य जार प्राप्त करने के लिए, हम उपयोग कर सकते हैं:

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

जैसे

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

यह काम करता है क्योंकि artifactपैरामीटर वास्तव में होते हैं groupId:artifactId:version[:packaging][:classifier]। बस पैकेजिंग और क्लासिफायर वैकल्पिक हैं।

साथ jarके रूप में पैकेजिंग और sourcesके रूप में वर्गीकारक , Maven निर्भरता प्लगइन हम स्रोतों जार, नहीं विरूपण साक्ष्य जार के लिए पूछ रहे हैं समझता है।

दुर्भाग्य से अब स्रोतों के लिए जार फ़ाइलों को सकरात्मक रूप से डाउनलोड नहीं किया जा सकता है, जो समझ में आता है, लेकिन आदर्श रूप से मेरा मानना ​​है कि यह विकल्प भी सम्मान कर सकता downloadSourcesहै जैसे मावेन एक्लिप्स प्लगइन करता है।


17

कोई निर्भरता का उपयोग कर सकता है: प्रतिलिपि ( http://maven.apache.org/plugins/maven-d dependency- plugin /copy- mojo.html ) जो प्लगइन विन्यास अनुभाग में परिभाषित कलाकृतियों की एक सूची लेता है और उन्हें एक निर्दिष्ट स्थान पर कॉपी करता है। , उनका नाम बदलकर या यदि वांछित है तो संस्करण को अलग करना। यह लक्ष्य दूरस्थ रिपॉजिटरी से कलाकृतियों को हल कर सकता है यदि वे स्थानीय रिपॉजिटरी या रिएक्टर में मौजूद नहीं हैं।

प्लगइन के सभी गुणों का उपयोग मावेन सीएलआई में नहीं किया जा सकता है। जिन संपत्तियों में "उपयोगकर्ता संपत्ति:" परिभाषित की गई संपत्ति निर्दिष्ट की जा सकती है। नीचे दिए गए उदाहरण में मैं अपने अस्थायी फ़ोल्डर में junit डाउनलोड कर रहा हूं और जार फ़ाइल से vesion को हटा रहा हूं।

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

जहाँ विरूपण साक्ष्य = कनिष्ठ: कनिष्ठ: 4.11 मावेन निर्देशांक है। और आप artifcat को groupId के रूप में निर्दिष्ट करते हैं: विरूपण साक्ष्य: संस्करण: [: पैकेजिंग [: वर्गीकरण]]

( प्रथम स्थान पर अपने https://stackoverflow.com/a/18632876/2509415 प्रदान करने के लिए पास्कल थिवेंट का धन्यवाद । मैं एक और उत्तर जोड़ रहा हूं)


11

एक लाइनर mvan के बिना नवीनतम मावेन विरूपण साक्ष्य डाउनलोड करने के लिए:

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। यह समाधान केवल एक विशिष्ट रिपॉजिटरी उत्पाद के साथ काम करने के लिए लगता है।
मार्टीन स्ट्रस

1
Nexus 2.x के साथ बढ़िया काम किया, 3.x (अभी तक) के साथ काम नहीं करता है
HDave

कर्ल: विकल्प -J अज्ञात है
xuehui

2

आधिकारिक प्रलेखन से उपयोग:

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

मेरे मामले के लिए, नीचे दिया गया जवाब देखें:

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

कमांड का उपयोग करें "मावन निर्भरता: प्राप्त करें" विशिष्ट आर्किटैक्ट डाउनलोड करने के लिए और कमांड का उपयोग करें "मावन निर्भरता: प्रतिलिपि" डाउनलोड की गई कलाकृतियों को डीआईआर को नष्ट करने के लिए कॉपी करने के लिए "-DoutputDirectory"


1

यहाँ एक उदाहरण दिया गया है कि ASM-7 को मावेन 3.6 का उपयोग किया जाता है:

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

या आप यहाँ से जार डाउनलोड कर सकते हैं: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm और फिर

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

आदेश:

mvn install:install-file 

आमतौर पर आपके स्थानीय भंडार में विरूपण साक्ष्य स्थापित करता है, इसलिए आपको इसे डाउनलोड करने की आवश्यकता नहीं होनी चाहिए। हालाँकि, यदि आप अपनी कलाकृतियों को दूसरों के साथ साझा करना चाहते हैं, तो आपको कलाकृतियों को एक केंद्रीय भंडार में तैनात करने की आवश्यकता होगी, अधिक विवरण के लिए तैनाती प्लगइन देखें।

इसके अतिरिक्त, अपने POM पर निर्भरता जोड़ने पर आपको अपनी परियोजना बनाते समय किसी भी तृतीय-पक्ष की कलाकृतियों की आवश्यकता होगी। यानी यह केंद्रीय भंडार से कलाकृतियों को डाउनलोड करेगा।


0

LATEST पदावनत किया जाता है, श्रेणी के साथ प्रयास करें [,)

./mvnw org.apache.maven.plugins:maven-dependency-plugin:3.1.1:get \  
-DremoteRepositories=repoId::default::https://nexus/repository/maven-releases/ \
"-Dartifact=com.acme:foo:[,)"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.