मैं कलाकृतियों को पुनः प्राप्त करने के लिए मावेन को अपने स्थानीय भंडार का उपयोग करने के बजाय दूरदराज के भंडार में जाने के लिए कैसे मजबूर करूं?


97

मैं मैक Yosemite पर जावा 8 के साथ मावेन 3.3.3 का उपयोग कर रहा हूं। मेरे पास एक मल्टी-मॉड्यूल प्रोजेक्ट है।

    <modules>
            <module>first-module</module>
            <module>my-module</module>
    </modules>

जब मैं अपने एक बच्चे के मॉड्यूल का निर्माण करता हूं, उदाहरण के लिए, ऊपर से "मेरा मॉड्यूल", "क्लीन क्लीन इंस्टॉल" का उपयोग करते हुए, बिल्ड ने मेरे ~ / .m2 में परिभाषित एक दूरस्थ रिपॉजिटरी से चाइल्ड मॉड्यूल कलाकृतियों को डाउनलोड करने का प्रयास किया। /settings.xml फ़ाइल। आउटपुट नीचे है

[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.9 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151104.200545-4.pom

दूरस्थ रिपॉजिटरी से डाउनलोड करने का प्रयास करने से पहले मैं अपने स्थानीय ~ / .m2 / रिपॉजिटरी की जांच करने के लिए मावेन को कैसे मजबूर करूं? नीचे वह जगह है जहाँ मेरे पास मेरी ~ / .m2 / settings.xml फ़ाइल में परिभाषित दूरस्थ रिपॉजिटरी हैं ...

<profile>
    <id>releases</id>
    <activation>
        <property>
            <name>!releases.off</name>
        </property>
    </activation>
    <repositories>
        <repository>
            <id>releases</id>
            <url>https://my.remoterepository.com/nexus/content/repositories/releases/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</profile>
<profile>
    <id>snapshots</id>
    <activation>
        <property>
            <name>!snapshots.off</name>
        </property>
    </activation>
    <repositories>
        <repository>
            <id>snapshots</id>
            <url>https://my.remoterepository.com/nexus/content/repositories/snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
</profile>

संपादित करें: उत्तर के जवाब में यह कहते हुए कि डाउनलोड तब होता है जब विरूपण साक्ष्य नहीं होता है, नीचे टर्मिनल आउटपुट है जिसमें मैं साबित करता हूं कि फ़ाइल मेरे रेपो में थी, लेकिन मावेन इसे वैसे भी डाउनलोड करने की कोशिश कर रहा है ...

Daves-MacBook-Pro-2:my-module davea$ ls -al ~/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar 
-rw-r--r--  1 davea  staff  10171 Nov  5 10:22 /Users/davea/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
Daves-MacBook-Pro-2:my-module davea$ mvn clean install
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for org.mainco.subco:my-module:jar:87.0.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration of plugin org.apache.maven.plugins:maven-antrun-plugin @ org.mainco.subco:my-module:[unknown-version], /Users/davea/Documents/sb_workspace/my-module/pom.xml, line 678, column 12
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.8 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151106.043202-8.pom
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-   module-87.0.0-20151106.043202-8.pom (3 KB at 21.9 KB/sec)
Downloading: http://download.java.net/maven/2/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml

2
रिमोट रिपॉजिटरी से एक आर्टवर्क डाउनलोड करने की कोशिश करने से पहले मावेन आपके स्थानीय भंडार की जांच करता है। क्या आप सुनिश्चित हैं कि इस निर्माण का प्रयास करने से पहले आपके स्थानीय लोगों के पास ये कलाकृतियाँ थीं? अब आप अपने स्थानीय भंडार का निरीक्षण कर सकते हैं और फिर से किसी अन्य निर्माण की कोशिश कर सकते हैं। इसके अलावा, आप यह निर्दिष्ट कर सकते हैं कि आपका स्थानीय भंडार कहाँ है settings.xml( यहाँ देखें )।
15

हालाँकि मैंने अपनी सेटिंग में अपनी रिपॉजिटरी निर्दिष्ट नहीं की है। xml फ़ाइल, यह डिफ़ॉल्ट है कि मेवेन ने - - ~ / .m2 / रिपॉजिटरी के लिए सेट अप किया है। क्या डिफ़ॉल्ट होने पर भी मुझे इसे निर्दिष्ट करना होगा?
डेव

मेरे लिए मेरी स्थानीय रिपॉजिटरी में अन्य फाइलें हैं, जैसे * .sha1 या * .lastUpdate। * .jar और * .pom को छोड़कर अन्य फ़ाइलों को हटा दें। रिमोट रिपॉजिटरी से फाइल को फिर से डाउनलोड करने से मावेन को रोका जाएगा
हारून

जवाबों:


45

निर्भरता में एक स्नैपशॉट संस्करण है। स्नैपशॉट के लिए, मावेन स्थानीय रिपॉजिटरी की जांच करेगा और अगर स्थानीय रिपॉजिटरी में पाया गया विरूपण साक्ष्य बहुत पुराना है, तो यह रिमोट रिपॉजिटरी में एक अद्यतन खोजने का प्रयास करेगा। शायद यही आप देख रहे हैं।

ध्यान दें कि यह व्यवहार updatePolicyरिपॉजिटरी कॉन्फ़िगरेशन में निर्देश द्वारा नियंत्रित किया जाता dailyहै (जो कि स्नैपशॉट रिपॉजिटरी के लिए डिफ़ॉल्ट रूप से है)।


16
क्या कंसोल कमांड तर्क द्वारा इसे "ओवरराइट" करना संभव है? जैसे: mvan clean install -FORCE_COMMAND
Naxos84

21
"बहुत पुराना" मतलब क्या? यह नवीनतम स्नैपशॉट चुनता है जो यह पा सकता है, चाहे वह स्थानीय हो या दूरस्थ? यह निश्चित रूप से भयानक व्यवहार होगा। यदि मैंने सिर्फ एक स्नैपशॉट बनाया है, तो मैं वास्तव में उस एक का उपयोग करना चाहता हूं, न कि सीआई द्वारा निर्मित एक पल बाद।
टॉम क्वारेंडन

कृपया इस बारे में अधिक बताएं कि "टू ओल्ड" का क्या अर्थ है?
कॉन बोंग

32

उपयोग mvn --helpऔर आप विकल्प सूची देख सकते हैं।

जैसे विकल्प है -nsu,--no-snapshot-updates Suppress SNAPSHOT updates

इसलिए कमांड का उपयोग mvn install -nsuस्थानीय रिपॉजिटरी के साथ संकलन करने के लिए मजबूर कर सकता है।


10
आप -o"ऑफ़लाइन" मावेन व्यवहार के लिए भी उपयोग कर सकते हैं
शॉन

8
-Nsu विकल्प मावन को रोकने की कोशिश नहीं करता है और यदि वह अभी तक डाउनलोड नहीं किया गया है तो स्थानीय बिल्ड जैसे कि आर्टिफिशियल का निर्माण किया गया था और स्थानीय रूप से इंस्टॉल किया गया था। -
user1767316

मुझे अभी तक डाउनलोड नहीं होने वाली एक विरूपण साक्ष्य के साथ एक ही समस्या थी और इसने मेरे लिए इसे ठीक किया: maven.apache.org/general.html#importing-jars
लुइगी

15

वास्तव में मावेन को केवल अपने स्थानीय रेपो का उपयोग करने के लिए मजबूर करने के लिए , आप साथ चल सकते हैं । बताता है maven आप "ऑफ़लाइन" काम करने देने के लिए, और यह नेटवर्क बंद रहेगी।mvn <goals> -o-o


5
-O विकल्प मवन् को रोकने की कोशिश नहीं करता है और यदि वह अभी तक डाउनलोड नहीं किया गया है, तो स्थानीय रूप से निर्मित कलाकृतियों का उपयोग करने के बजाय जब वह स्थानीय रूप से स्थापित किया गया था और स्थापित किया गया था, तो एक कलाकृतियों को डाउनलोड करने में विफल रहता है।
user1767316

2
यह सच है - यदि आपके पास एक स्थानीय प्रति नहीं है, तो आप भाग्य से बाहर हैं। यह उन परियोजनाओं के लिए उपयोगी है जिन्हें आपने पहले बनाया था, लेकिन संभावित रूप से हाल ही में एसएनएपीएसएचओटी परिवर्तन हुए हैं जिनकी आपको परवाह नहीं है।
सीन

या यहां तक ​​कि अगर आपने कभी भी उस परियोजना का निर्माण नहीं किया है जिसे आप इसके लिए तैयार कर सकते हैंmvn dependency:go-offline
एल्डियन

क्या होगा यदि आपके पास एक स्थानीय प्रतिलिपि है जिसे आपने अभी स्थापित किया है (इसलिए यह दूरस्थ स्नैपशॉट रेपो में तैनात / उपलब्ध नहीं है)?
विवेक चावड़ा

1
आह, मैंने सिर्फ निर्भरता के संग्रह के साथ एक पोम परियोजना बनाई है, लेकिन खपत परियोजना में <प्रकार> पोम </ प्रकार> निर्दिष्ट नहीं किया है, इसलिए यह एक जार की तलाश में था (और निश्चित रूप से इसे ढूंढ नहीं पाया, यहां तक ​​कि ऑफ़लाइन मोड में)
विवेक चावड़ा

4

मेरे मामले में मेरे पास आपकी तरह एक मल्टी मॉड्यूल प्रोजेक्ट था। मुझे बाहरी पुस्तकालयों में से एक के एक समूह आईडी को बदलना पड़ा, जो कि मेरी परियोजना नीचे दिखाए गए अनुसार थी।

से:

<dependencyManagement>
    <dependency>
        <groupId>org.thirdparty</groupId>
        <artifactId>calculation-api</artifactId>
        <version>2.0</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>
<dependencyManagement>

सेवा:

<dependencyManagement>
   <dependency>
      <groupId>org.thirdparty.module</groupId>
        <artifactId>calculation-api</artifactId>
        <version>2.0</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>
<dependencyManagement>

<GroupId> अनुभाग पर ध्यान दें। यह पता चला कि मैं सबमॉडल्स के संबंधित अनुभाग को मोडिफाई करना भूल गया था जो इस निर्भरता को उनकी पोम फाइलों में परिभाषित करता है।

इसने मुझे बहुत पागल कर दिया क्योंकि मॉड्यूल स्थानीय रूप से उपलब्ध था।


4

नीचे दिए गए चरणों का पालन करें:

    1. अपने स्थानीय में स्थित जार फोल्डर की सभी सामग्रियों को उस जार को छोड़कर सुनिश्चित करें जिसे आप रखना चाहते हैं।
      उदाहरण के लिए फाइलें .repositories, .pom, .sha1, .lastUpdated आदि।
    1. mvn clean install -oआदेश निष्पादित करें

यह किसी भी रिपॉजिटरी से कनेक्ट करने के बजाय स्थानीय रिपॉजिटरी जार फ़ाइलों का उपयोग करने में मदद करेगा।


1
केवल *.repositoriesऔर *.sha1फाइलों को
हटाकर

2

-O विकल्प ने मेरे लिए काम नहीं किया क्योंकि विरूपण अभी भी विकास में है और अभी तक अपलोड नहीं किया गया है और मावेन (3.5.x) अभी भी इसे दूरस्थ रिपॉजिटरी से डाउनलोड करने की कोशिश करता है क्योंकि यह पहली बार है, त्रुटि के अनुसार मुझे मिलता है।

हालाँकि इसने इसे मेरे लिए तय किया: https://maven.apache.org/general.html#importing-jars

इस मैनुअल इंस्टॉल के बाद ऑफ़लाइन विकल्प का उपयोग करने की कोई आवश्यकता नहीं है।

अपडेट करें

मैंने सिर्फ निर्भरता का पुनर्निर्माण किया है और मुझे इसे फिर से आयात करना पड़ा: नियमित mvn clean installमेरे लिए पर्याप्त नहीं था


-1

मावेन हमेशा आपके स्थानीय भंडार की जांच करता है, हालाँकि, इसे खोजने के लिए मावेन के लिए आपकी निर्भरता को आपके रेपो में स्थापित करने की आवश्यकता होती है।

mvn installपहले अपने निर्भरता मॉड्यूल में चलाएँ , और फिर अपने निर्भर मॉड्यूल का निर्माण करें।


1
मैंने अपने प्रश्न को यह दिखाने के लिए संपादित किया है कि विरूपण साक्ष्य रेपो में है (नोटिस "ls -al" कमांड जिसे मैं चलाता हूं। फिर भी मावेन इसे वैसे भी डाउनलोड करने का प्रयास कर रहा है। कोई अन्य विचार?
डेव

5
@ ओलिवर: आप इस तथ्य को याद कर रहे हैं कि स्थानीय रिपॉजिटरी में कलाकृतियों के लिए, मावेन अभी भी रिमोट रिपॉजिटरी से परामर्श कर सकता है यदि विरूपण साक्ष्य स्नैपशॉट है जो बहुत पुराना है।
एंड्रियास वीथेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.