मैं मावेन-सेंट्रल-रेपो से एक निश्चित समूह से कलाकृतियों के अपडेट की जांच करने का प्रयास करने के लिए मैवेन को कैसे रोक सकता हूं?


126

मैं काफी बड़े मावेन प्रोजेक्ट पर काम कर रहा हूं। हमारे पास संभवतः लगभग 70 या इतनी व्यक्तिगत कलाकृतियां हैं, जो मोटे तौर पर साझा कोड के दो पुस्तकालयों में विभाजित हैं और शायद दस अनुप्रयोग जो उनका उपयोग करते हैं। ये सभी आइटम नाम स्थान में रहते हैं com.mycompany.*

ज्यादातर समय हम स्नैपशॉट बिल्ड के खिलाफ चल रहे हैं। इसलिए एक आवेदन का पूर्ण निर्माण करने के लिए, मैं पहले पुस्तकालय परियोजनाओं का निर्माण कर सकता हूं ताकि वे मेरे स्थानीय भंडार (जैसे, कहते हैं, mycompany-libname-2.4-SNAPSHOT.jar) में स्थापित हो जाएं।

समस्या यह है कि जब मैं तब एप्लिकेशन का निर्माण करता हूं। किसी कारण से, मावेन सभी mycompany-*-SNAPSHOT.jarकलाकृतियों के अपडेट के लिए मुख्य दो सार्वजनिक रिपॉजिटरी (मावेन-नेट-रेपो और जावा-नेट-रेपो) की जांच करना चाहता है । बेशक, वे वहां नहीं पाए जाते हैं, और सब कुछ अंततः उन संस्करणों पर वापस आ जाता है, जिन्हें मैंने सिर्फ अपने स्थानीय भंडार में बनाया था, लेकिन मैं मावेन को ऐसा करने से रोकना चाहूंगा क्योंकि (ए) यह मुझे एक बुरा जाल जैसा महसूस कराता है। उन चीज़ों के लिए इन रिपॉजिटरी की लगातार जाँच करना, जो कभी नहीं होंगी, और (बी) यह कुछ अनावश्यक और कष्टप्रद नेटवर्क विलंबता को इस निर्माण प्रक्रिया में जोड़ती है।

मैं इस समय के आसपास काम करने के लिए ज्यादातर समय ऑफ़लाइन मोड में मावेन को चलाने के लिए ले गया हूं, लेकिन यह आदर्श नहीं है क्योंकि कभी-कभी एक सार्वजनिक पुस्तकालय पर निर्भरता को अपडेट किया जाएगा। तो मैं जो खोज रहा हूं वह एक ऐसा समाधान है जिसके कारण मावेन कलाकृतियों के लिए दिए गए रिपॉजिटरी से अपडेट की जांच नहीं करेगा, जो कुछ मानदंडों को पूरा करता है - इस मामले में, मुझे खुशी होगी अगर मावेन या तो स्नैपशॉट संस्करण या कलाकृतियों को अनदेखा करेंगे जो कि थे com.mycompanyनाम स्थान।

जवाबों:


34

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

<repository>
    <id>jboss</id>
    <name>JBoss Repository</name>
    <url>http://repository.jboss.com/maven2</url>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
</repository>

उत्तर के लिए बहुत बहुत धन्यवाद। इसने अंततः मेरी मदद की। मैं एक रिपॉजिटरी के लिए स्नैपशॉट डाउनलोड के साथ कुछ परेशानियों का सामना कर रहा था। अद्यतन पुलिस के साथ भी डाउनलोड लटका हुआ था। अब स्नैपशॉट डाउनलोड नहीं किए जाते हैं जो कि वास्तव में मैं चाहता था।
वोल्फ्रोमा

163

इसके अलावा, आप उपयोग कर सकते हैं -oया --offlinemvan कमांड लाइन में जो "ऑफ़लाइन मोड" में मावेन डालेंगे, इसलिए यह अपडेट की जांच नहीं करेगा। आपको अपने स्थानीय रेपो में पहले से ही निर्भरता नहीं होने के बारे में कुछ चेतावनी मिलेगी, लेकिन कोई बड़ी बात नहीं।


8
यह जारी निर्भरता को डाउनलोड करने से मावेन को भी रोक देगा। आप जारी किए गए पुस्तकालय का एक नया संस्करण चाहते हो सकते हैं, बिना स्नैपशॉट को अपडेट के लिए चेक किया जा सकता है
hobgoblin

2
यह मूल प्रश्न का उत्तर नहीं है! यह इतने सारे अपवित्र कैसे हो सकते हैं ??? ओपी ने स्पष्ट रूप से लिखा है कि उसने ऑफ़लाइन मोड में मावेन चलाने की कोशिश की लेकिन यह उसके उद्देश्य के लिए आदर्श नहीं है!
होन्ज़ा ज़िदेक

95

कुछ है जो अब मावेन में भी उपलब्ध है

mvn goal --no-snapshot-updates

या संक्षेप में

mvn goal -nsu

3
बस के मामले में किसी भी SBT लोग यहाँ भूमि: set offline := trueसत्र में, या offline := trueमें build.sbt
ऑफीयेट करें

5
इसके अलावा, nsuविकल्प v 3.0.3 में टूट गया है ( MNG-5064 देखें )। मज़बूती से इस विकल्प का उपयोग करने के लिए, आपको कम से कम v। 3.0.4 या v। 3.0.5 में अपग्रेड करने की आवश्यकता हो सकती है
आशुतोष जिंदल

बहुत अच्छा
AntJavaDev

32

अद्यतन: मुझे शायद इसके साथ शुरू करना चाहिए था क्योंकि आपकी परियोजनाएँ स्नैपशॉट हैं। यह SNAPSHOT शब्दार्थ का एक हिस्सा है जो मावेन प्रत्येक बिल्ड पर अपडेट की जांच करेगा। SNAPSHOT होने का अर्थ है कि यह अस्थिर है और इसे बदलने के लिए विषय के लिए अपडेट की जाँच की जानी चाहिए। हालाँकि यह इंगित करने योग्य है कि मावेन सुपर पोम स्नैपशॉट को अक्षम करने के लिए केंद्रीय को कॉन्फ़िगर करता है, इसलिए मावेन को कभी भी केंद्रीय पर अपडेट के लिए जाँच नहीं करनी चाहिए जब तक कि आपने अपने स्वयं के पोम / सेटिंग्स में ओवरराइड नहीं किया हो।


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

अपनी सेटिंग में ।xml आप अपने आंतरिक भंडार को केंद्रीय के लिए दर्पण के रूप में सेट करने के लिए कुछ इस तरह से जोड़ेंगे:

<mirrors>
  <mirror>
    <id>ibiblio.org</id>
    <name>ibiblio Mirror of http://repo1.maven.org/maven2/</name>
    <url>http://path/to/my/repository</url>
    <mirrorOf>central</mirrorOf>
  </mirror>
</mirrors>

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


एक अधिक बुनियादी समाधान यदि आप केवल स्थानीय रिपोजिटरी के साथ काम कर रहे हैं , तो केंद्रीय रिपॉजिटरी के लिए अपडेटपॉलिसी को "कभी नहीं" के लिए सेट करना है , इसका मतलब है कि मावेन केवल उन कलाकृतियों की जांच करेगा जो पहले से ही स्थानीय रिपॉजिटरी में नहीं हैं। इसके बाद कमांड लाइन पर ओवरराइड किया जा सकता है जब अद्यतन के लिए जाँच करने के लिए मावेन को मजबूर करने के लिए -U स्विच का उपयोग करके।

आप निम्नानुसार रिपॉजिटरी (अपने पोम या सेटिंग में एक प्रोफ़ाइल) में कॉन्फ़िगर करेंगे:

<repository>
  <id>central</id>
  <url>http://repo1.maven.org/maven2</url>
  <updatePolicy>never</updatePolicy>
</repository>

हमारे पास वास्तव में पहले से ही एक केंद्रीय भंडार है, लेकिन निश्चित रूप से हम स्नैपशॉट को प्रकाशित नहीं करते हैं, इसलिए संभवत: मुझे अभी भी प्रॉक्सी / दर्पण के साथ असफल अपडेट चेक मिलेंगे - मैं मावेन को पाने के लिए एक रास्ता तलाश रहा हूं। इन कलाकृतियों के लिए अद्यतन की जाँच न करना।
टिम गिल्बर्ट

1
यह भी अपने SNAPSHOTs के लिए अपने केंद्रीय भंडार पर एक तार्किक भंडार स्थापित करने के लायक है। इसका मतलब है कि वे आपके डेवलपर्स के बीच साझा किए जा सकते हैं और आपको उन सभी को स्थानीय स्तर पर बनाने की आवश्यकता नहीं है। फिर दूरस्थ रिपॉजिटरी में धकेल दिए जाने के बाद आप किसी भी स्नैपशॉट निर्भरता में परिवर्तन करके SNAPSHOTs का पूरा लाभ प्राप्त करेंगे।
रिच सेलर

धन्यवाद - updatePolicy झंडा वैसा ही दिखता है जैसा मैं देख रहा था।
टिम गिल्बर्ट

1
नेक्सस आपको कंपनी की कलाकृतियों को बाहरी जाने के लिए किसी भी अनुरोध को रोकने के लिए नियमों को कॉन्फ़िगर करने की अनुमति देता है।
ब्रायन फॉक्स

यहाँ XML स्निपेट अब पुराना हो गया है। updatePolicyतत्व के तहत चला जाता है snapshotsया releasesतत्व। देखें: maven.apache.org/settings.html
जेफ इवांस

5

बहुत आसान :

अपने सुपर पोम पैरेंट या सेटिंग। Xml में, का उपयोग करें

        <repository>
        <id>central</id>
        <releases>
            <updatePolicy>never</updatePolicy>
        </releases>
        <snapshots>
            <updatePolicy>never</updatePolicy>
        </snapshots>
        <url>http://repo1.maven.org/maven2</url>
        <layout>legacy</layout>
    </repository>

यह मेरी युक्तियां हैं


0

मुझे इससे कुछ परेशानी हुई,

<repository>
    <id>java.net</id>
    <url>https://maven-repository.dev.java.net/nonav/repository</url>
    <layout>legacy</layout>
</repository>
<repository>
    <id>java.net2</id>
    <url>https://maven2-repository.dev.java.net/nonav/repository</url>
</repository>

"कभी नहीं" के लिए अद्यतन करें इन रेपो को हटाना मैं इसे हल करने का तरीका था। ps: मैं वेब सेवाओं के बारे में इस ट्यूटोरियल का अनुसरण कर रहा था (btw, शायद जावा के लिए ws के लिए सबसे अच्छा ट्यूटोरियल)


1
क्या आप Intellij का उपयोग कर रहे हैं? क्योंकि इंटेलीज + मावेन = अपडेट को अनदेखा करें। बग रिपोर्ट देखें youtrack.jetbrains.com/issue/IDEA-76869
मानव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.