आप अपाचे मावेन का कैश कैसे साफ़ करते हैं?


212

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

क्या इस कैश को साफ़ करने का कोई तरीका है जिससे मावेन को हमेशा स्थानीय कलाकृतियों के एक स्वच्छ निर्माण को ट्रिगर करने के लिए मजबूर किया जाए?

विशेष रूप से, हम युद्ध प्लगइन के साथ एक वेबएप्प बनाने के मुद्दे पर हैं। मावेन संस्करण 3.0.3 है। युद्ध प्लगइन संस्करण 2.1.1 है।


2
क्या आपने -Uध्वज की कोशिश की है जो कलाकृतियों को अपडेट करेगा?
आमिर रामिनफर

2
क्या आप अधिक जानकारी दे सकते हैं? क्या आश्रित युद्ध में अद्यतन नहीं हो रहे हैं? यदि हां, तो आश्रितों के पास स्नैपशॉट संस्करण हैं?
रघुराम

क्या यह मल्टीमॉडल प्रोजेक्ट है? क्या आपने डिपेंडेंट मॉड्यूल के वर्जन नंबर को चेक किया है? क्या आप पुन: पेश कर सकते हैं? mvn clean installनई कलाकृतियों को स्थानीय भंडार में डालें?
पालक

@ MetroidFan2002 क्या हम यहाँ एक चिह्नित उत्तर दे सकते हैं। या आप एक समाधान लिख सकते हैं यदि आप अपने दम पर किसी भी पाया।
नमन

1
mvn clean install -Dmaven.repo.local=/alternate/repo/location
गायन वीरकुट्टी

जवाबों:


225

c:\Users\<username>\.m2\repositoryहाथ से कलाकृतियों (या पूर्ण स्थानीय रेपो) को हटाएं ।


4
कोशिश की कि पहले से ही, काम नहीं किया। फिर भी सुझाव के लिए धन्यवाद।
MetroidFan2002

3
ऐसा लगता है, फिर से शुरू होने के बाद भी, बहुत सारे The action can't be completed because the folder or file in it is open in another program. Close the folder or file and try again.
मावेन

1
ध्यान दें कि आपके सिस्टम पर फ़ोल्डर का स्थान अलग-अलग हो सकता है - यह उत्तर देखें कि
मैवेन

9
@ liltitus27 यहाँ ही, बस मिटा देना ~ / .m2 / भंडार काम नहीं किया, mvn dependency:purge-local-repositoryअंत में काम किया
qbert65536

हाँ यह मेरे लिए 100% काम करता है - एक उपयोगकर्ता के रूप में कॉर्पोरेट नेटवर्क पर विंडोज 10 व्यवस्थापक नहीं
ग्रीम फिलिप्स

176

स्थानीय कैश को साफ़ करने के लिए निर्भरता प्लग-इन का उपयोग करके देखें।

  1. mvn dependency:purge-local-repository: यह स्थानीय रिपॉजिटरी फ़ाइलों को हटाने का एक प्रयास है लेकिन यह हमेशा चला जाता है और चीजों को हटाए जाने के बाद स्थानीय रिपॉजिटरी को भर देता है।
  2. mvn dependency:purge-local-repository -DreResolve=false: यह निर्भरता के फिर से हल करने से बचा जाता है लेकिन लगता है कि अभी भी कई बार नेटवर्क पर जाता है।
  3. mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false: यह Paweł Prażak द्वारा जोड़ा गया था और अच्छी तरह से काम करता है। यदि आप स्थानीय रेपो को खाली करना चाहते हैं तो मैं तीसरे का उपयोग करूंगा, और पहला यदि आप केवल स्थानीय रेपो को बाहर फेंकना चाहते हैं और फिर से निर्भरता प्राप्त करना चाहते हैं।

4
उनके बीच क्या अंतर है?
पीटर डी ब्यू

13
पहला स्थानीय रिपॉजिटरी फ़ाइलों को हटाने का एक प्रयास है, लेकिन यह हमेशा चला जाता है और चीजों को हटाए जाने के बाद स्थानीय रिपॉजिटरी को भर देता है। दूसरा निर्भरता के फिर से हल करने से बचता है, लेकिन लगता है कि अभी भी कई बार नेटवर्क पर जाता है। तीसरा Paweł Prażak द्वारा जोड़ा गया था और अच्छी तरह से काम करता है। यदि आप स्थानीय रेपो को खाली करना चाहते हैं, तो मैं तीसरे का उपयोग करूंगा और यदि आप केवल स्थानीय रेपो को बाहर फेंकना चाहते हैं और निर्भरता फिर से प्राप्त करना चाहते हैं।
ब्रायन सी।

एक linux सिस्टम पर कमांड लाइन से। आपको mvan इंस्टॉल करने की आवश्यकता होगी। maven.apache.org/install.html
ब्रायन सी।

मैं जोड़ूंगा कि आप एक अतिरिक्त पैरामीटर के साथ विशिष्ट समूहों / कलाकृतियों को लक्षित कर सकते हैं। यह उत्तर निश्चित रूप से है जो मैं खोज रहा था (विकल्प 3)। यहाँ यह है कि अतिरिक्त पैरामीटर ::: mvan निर्भरता: purge-local-repository -DmanualInclude = "myGroupId" -DsnapshotsOnly = true -DactTransitively = false -DreResolve = false
granadaCoder

मैंने स्थानीय रिपॉजिटरी के भीतर सभी सामग्रियों को हटाने के उद्देश्य से तीसरे विकल्प की कोशिश की , लेकिन यह काम नहीं करता है - जब तक कि इस लक्ष्य को पूरा करने का अनूठा तरीका मैन्युअल रूप से उस निर्देशिका की सभी सामग्री को हटा नहीं रहा है। मेरे पास स्थान से भिन्न स्थान पर स्थानीय भंडार है <User_Name>/.m2। यकीन नहीं होता अगर इसका कारण होगा।
मैनुअल जॉर्डन

13

क्या आपने अपने में रिपॉजिटरी के लिए अपडेटपॉलिसी सेटिंग्स को चेक / बदल दिया है settings.xml

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

इसे सेट करने का प्रयास करें always


1
इससे निपटने के लिए संभावित मदद ... मेरे पास <updatePolicy>मेरे pom.xml में नहीं है , लेकिन वहाँ है<snapshotPolicy>
अल लेलोपाथ

updatePolicy मेरी सेटिंग में हमेशा हर जगह सेट होता है। xml।
मास्टरजियो 2

11

मैं निम्नलिखित कार्य करूंगा:

mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false --fail-at-end

झंडे मावेन को निर्भरता को हल करने या नेटवर्क को हिट करने की कोशिश नहीं करने के लिए कहते हैं। जो आप स्थानीय रूप से देखते हैं उसे हटा दें।

और अच्छे उपाय के लिए, त्रुटियों को अनदेखा करें ( --fail-at-end) बहुत अंत तक। यह कभी-कभी उन परियोजनाओं के लिए उपयोगी होता है जिनमें कुछ हद तक निर्भरता का गड़बड़झाला होता है या कुछ हद तक गड़बड़ किए गए आंतरिक भंडार (यह होता है) पर निर्भर होता है।


1
क्या यह थोड़े सफाई के लिए केवल स्थानीय कैश फ़ोल्डर को हटाने के लिए पर्याप्त नहीं है?

1
आप हर एक सकर्मक निर्भरता को जान सकते हैं। लेकिन तब यह थकाऊ हो जाता है (या हम सिर्फ पूरे कैश को हटा सकते हैं, लेकिन यह मावेन को फिर से आर्टवर्क में असंबंधित चीजों के लिए सब कुछ डाउनलोड करने के लिए मजबूर कर देगा।) यह सब स्थिति की बारीकियों पर निर्भर करता है।
luis.espinal

6

यह स्प्रिंग टूल सूट v 3.1.0 पर काम करता है। कृपया, लेकिन मुझे लगता है कि यह ग्रहण पर भी उपलब्ध है।

/username/.m2निर्देशिका में हाथ से कलाकृतियों को हटाने के बाद (जैसा कि ऊपर पैलेटिंस द्वारा कहा गया है) , निम्नलिखित को करके फाइलों को फिर से अनुक्रमित करें:

के लिए जाओ:

  • Windows->Preferences->Maven->User Settings मेन्यू।

टेक्स्ट बॉक्स के Reindexबगल में स्थित बटन पर क्लिक करें Local Repository। "लागू करें" और फिर "ठीक है" पर क्लिक करें।


2

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

यदि आप एक मिटेन चरण में इस विलोपन को एम्बेड करना चाहते हैं, उदाहरण के लिए cleanआप maven-clean-pluginसेटिंग्स के माध्यम से रिपॉजिटरी का उपयोग कर सकते हैं और एक्सेस कर सकते हैं , उदाहरण के लिए:

 <plugin>
    <inherited>false</inherited>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.1</version>
    <executions>
        <execution>
            <phase>clean</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo>Base clean is attached to deleting local maven cache</echo>
                    <echo>${settings.localRepository}</echo>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>

<plugin>
    <inherited>false</inherited>
    <artifactId>maven-clean-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <filesets>
            <fileset>
                <directory>${settings.localRepository}</directory>
            </fileset>
        </filesets>
    </configuration>
</plugin>

2

उपयोग करें mvn dependency:purge-local-repository -DactTransitively=false -Dskip=trueयदि आपके पास मॉड्यूल के रूप में मावेन प्लगइन्स हैं। अन्यथा मावेन उन्हें फिर से जोड़ने की कोशिश करेगा, इस प्रकार निर्भरता को फिर से डाउनलोड करना।


1
यह वास्तव में मैं क्या देख रहा था, यह सिर्फ एक टाइपो है (स्किप के लिए एक डैश गायब): mvan निर्भरता: purge-local-repository -DactTransitively = false -Dskip = true
shoguren

0

मुझे यही समस्या है, और मैंने इसे करने के लिए शेल में एक-लाइनर लिखा।

rm -rf $(mvn help:evaluate -Dexpression=settings.localRepository\
                       -Dorg.slf4j.simpleLogger.defaultLogLevel=WARN -B \
                       -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn | grep -vF '[INFO]')/*

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

#!/usr/bin/env bash
REPOSITORY=$(mvn help:evaluate \
  -Dexpression=settings.localRepository \
  -Dorg.slf4j.simpleLogger.defaultLogLevel=WARN \
  -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \
  --batch-mode \
  | grep -vF '[INFO]')

rm -rf $REPOSITORY/*

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

यह थोड़ा संभलकर चलने वाला है, लेकिन यह व्यवसाय करने का एक अच्छा तरीका है, IMO।


-3

तो कुछ कमांड हैं जिनका उपयोग आप सफाई के लिए कर सकते हैं

 1. mvn clean cache   
 2. mvn clean install 
 3. mvn clean install -Pclean-database

.m2 से रिपॉजिटरी फ़ोल्डर को हटाने से भी मदद मिल सकती है।


1
"Mvan क्लीन कैश" क्या करना चाहिए? यह मेरे लिए एक मान्यता प्राप्त आदेश नहीं लगता है।
AMTerp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.