मावेन क्यों हर बार मावेन-मेटाडेटा.एक्सएमएल डाउनलोड कर रहा है?


116

नीचे वह त्रुटि है जो मुझे आमतौर पर तब मिलती है जब मावेन के साथ वेब एप्लिकेशन बनाने की कोशिश करते समय मेरा इंटरनेट कनेक्शन भड़कीला होता है।

मेरा सवाल यह है कि, मावेन को हमेशा हर बार डाउनलोड क्यों करना पड़ता है जब वही ऐप पहले बनाया गया हो।

मेरे कॉन्फ़िगरेशन में क्या गलत हो सकता है जो हर बार डाउनलोड करने के लिए मावेन बनाता है?

नीचे एक त्रुटि है जो मुझे तब मिलती है जब मैं ऑफ़लाइन बनाने की कोशिश करता हूं:

[INFO] ------------------------------------------------------------------------
[INFO] Building mywebapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://raw.github.com/pagecrumb/mungo/mvn-repo/com/pagecrumb/mungo/0.0.1-SNAPSHOT/maven-metadata.xml

[WARNING] Could not transfer metadata com.mywebapp:mungo:0.0.1-SNAPSHOT/maven-metadata.xml 
from/to mungo-mvn-repo (https://raw.github.com/pagecrumb/mungo/mvn-repo/): raw.github.com
[INFO] 
[INFO] --- maven-war-plugin:2.1.1:war (default-cli) @ mywebapp ---
[INFO] Packaging webapp
[INFO] Assembling webapp [mywebapp] in [D:\workspace\web\target\mywebapp-1.0-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [D:\workspace\web\src\main\webapp]
[INFO] Webapp assembled in [1237 msecs]
[INFO] Building war: D:\workspace\web\target\mywebapp-1.0-SNAPSHOT.war
[WARNING] Warning: selected war files include a WEB-INF/web.xml which will be ignored 
(webxml attribute is missing from war task, 
or ignoreWebxml attribute is specified as 'true')
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building com.mywebapp [com.mywebapp] 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.1/maven-release-plugin-2.1.pom

[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-release-plugin:2.1: Plugin org.apache.maven.plugins:maven-release-plugin:2.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-release-plugin:jar:2.1
Downloading: http://download.java.net/maven/2/org/apache/maven/plugins/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/codehaus/mojo/maven-metadata.xml

397/397 B   

Downloaded: http://download.java.net/maven/2/org/codehaus/mojo/maven-metadata.xml (397 B at 0.0 KB/sec)
[WARNING] Failure to transfer org.apache.maven.plugins:maven-war-plugin/maven-metadata.xml from http://download.java.net/maven/2 was cached in the local repository, resolution will not be reattempted until the update interval of maven2-repository.dev.java.net has elapsed or updates are forced. Original error: Could not transfer metadata org.apache.maven.plugins:maven-war-plugin/maven-metadata.xml from/to maven2-repository.dev.java.net (http://download.java.net/maven/2): download.java.net
[INFO] 
[INFO] --- maven-war-plugin:2.3:war (default-cli) @ mywebapp-build ---
[INFO] Packaging webapp
[INFO] Assembling webapp [mywebapp-build] in [D:\workspace\target\mywebapp-build-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Webapp assembled in [15 msecs]
[INFO] Building war: D:\workspace\target\mywebapp-build-0.0.1-SNAPSHOT.war
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] mywebapp ..................................... SUCCESS [27.999s]
[INFO] com.mywebapp [com.mywebapp] ..................... FAILURE [1:00.406s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:41.409s
[INFO] Finished at: Tue May 07 22:13:38 SGT 2013
[INFO] Final Memory: 11M/28M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.3:war 
(default-cli) on project mywebapp-build: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)

2
मावेन को पाने के लिए
एसएनएपीएसओटीओटी के

7
मैं पता नहीं क्यों, लेकिन आप की तरह -ओ विकल्प का उपयोग करके इस से बच सकते हैंmvn clean install -o
चींटी

दरअसल, जो निर्माण विफल रहता है, वह है "त्रुटि कोडांतरण WAR: webxml विशेषता आवश्यक है (या पहले से मौजूद WEB-INF / web.xml यदि अपडेट मोड में निष्पादित हो रहा है)"। इसलिए आपको इसे ठीक करना चाहिए। मैं इसे आपके इंटरनेट कनेक्शन से संबंधित होने की छवि नहीं दे सकता। निर्भरता रिज़ॉल्यूशन चेतावनियाँ बस यही हैं: चेतावनियाँ। वे आपकी बिल्ड विफलता का अंतिम कारण नहीं हैं।
फ्रांसेस

शायद आप अपने प्रश्न को स्पष्ट कर सकते हैं क्योंकि आपको लगता है कि दो प्रश्न हैं: 1) मेरा निर्माण विफल क्यों है? 2) मावेन मेटाडेटा डाउनलोड करने की कोशिश क्यों कर रहा है? user944849 का जवाब 2 का जवाब देने के लिए एक लंबा रास्ता तय करता है)। यदि यह आपके प्रश्न का उत्तर देता है, तो आपको इसे स्वीकार करना चाहिए।
फ्रांसेस

स्नैपशॉट मेटाडेटा अपडेट का उपयोग करने से बचा जा सकता है -nsu, --no-snapshot-updatesविकल्पmvn
जनक बंदारा

जवाबों:


127

तत्व के settings.xmlलिए अपने (या, संभवतः आपके प्रोजेक्ट के माता-पिता या कॉर्पोरेट माता-पिता POM) को देखें <repositories>। यह नीचे की तरह कुछ दिखेगा।

<repositories>
    <repository>
        <id>central</id>
        <url>http://gotoNexus</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </snapshots>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </releases>
    </repository>
</repositories>

<updatePolicy>तत्व को नोट करें । उदाहरण मावेन को दूरस्थ रेपो (मेरे मामले में नेक्सस, मावेन सेंट्रल से संपर्क करने के लिए कहता है यदि आप अपने खुद के रिमोट रेपो का उपयोग नहीं कर रहे हैं) किसी भी समय मावेन को एक बिल्ड के दौरान स्नैपशॉट विरूपण साक्ष्य को पुनः प्राप्त करने की आवश्यकता है, यह देखने के लिए कि क्या कोई नई प्रति है। इसके लिए मेटाडेटा आवश्यक है। अगर कोई नई प्रति है तो मावेन इसे आपके स्थानीय रेपो में डाउनलोड करता है।

उदाहरण के लिए, रिलीज के लिए, पॉलिसी है dailyइसलिए यह आपके दिन के पहले निर्माण के दौरान जांच करेगा। neverएक वैध विकल्प भी है, जैसा कि मावेन सेटिंग्स डॉक्स में वर्णित है ।

प्लगइन्स अलग से हल किए जाते हैं। यदि आपके पास वांछित है, तो विभिन्न अद्यतन नीतियों के साथ, आपके पास रिपॉजिटरी कॉन्फ़िगर हो सकती है।

<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://gotoNexus</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </snapshots>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
        </releases>
    </pluginRepository>
</pluginRepositories>

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


2
सवाल यह है: यह हमेशा "कभी नहीं" क्यों नहीं है (जो मुझे लगता है कि यह होना चाहिए)? आपको दैनिक या हमेशा अपडेट की आवश्यकता क्यों है?
लियोन

@Leon मध्य-विकास चक्र के दौरान आपकी परियोजना में '-SAPSHOT' निर्भरता हो सकती है जिसके लिए आप हमेशा नवीनतम निर्मित संस्करण को चुन सकते हैं - कम से कम, CI सिस्टम पर जो आप शायद करेंगे, एक डेवलपर की अलग प्राथमिकता हो सकती है - ट्रेडिंग बिल्ड स्थिरता बनाम नवीनतम परिवर्तन हो रहे हैं। मावेन डॉक्स (चारित्रिक रूप से, दुर्भाग्य से) स्पष्ट करने में विफल रहते हैं, यदि कुछ भी सेट नहीं किया गया है, तो इसके लिए डिफ़ॉल्ट मान हैं।
एड रान्डेल

1
सबसे अच्छा अभ्यास यह है कि एक बार जारी किया गया एक विरूपण साक्ष्य कभी नहीं बदलता है, इसलिए <updatePolicy> never </ updatePolicy> उनके लिए उपयुक्त होना चाहिए।
एड रान्डेल

लेकिन क्या होगा अगर आप अपनी POM निर्भरता को एक नई रिलीज़ पर अपडेट करें? क्या इसे कभी अपडेट नहीं किया जाएगा?
फिलिप रेगो

1
@PhilipRego - अपडेटपॉलिसी प्रति-कलाकृतियों पर लागू होती है। यदि आप एक संस्करण संख्या या समूह / विरूपण साक्ष्य आईडी बदलते हैं, तो यह एक अलग कलाकृति है। यदि अपडेटपॉलिसी 'कभी नहीं' है, तो एक बार आर्टिफिशियल डाउनलोड हो जाएगा, जब तक कि रिफ्रेश के साथ जबरदस्ती न की जाए -Uया आर्टिफिशियल को स्थानीय रेपो से हटा दिया जाए और इस तरह से इसे डाउनलोड करने की जरूरत है।
user944849

31

इसे -o,--offline "Work offline"रोकने के लिए ध्वज का उपयोग करना संभव है।

ऐशे ही:

maven compile -o


मेरा मानना ​​है कि यह सही उत्तर होना चाहिए, क्योंकि आप बस इस कमांड को कॉल कर सकते हैं जब आपका इंटरनेट कनेक्शन फ़्लैंक हो। और यह वही था जो पूछा गया था ...
तो एस

13

मुझे लगता है क्योंकि आपने प्लगइन संस्करण को निर्दिष्ट नहीं किया है, इसलिए यह अंतिम मेटाडेटा के डाउनलोड को ट्रिगर करता है ताकि अंतिम एक मिल सके।

अन्यथा क्या आपने स्थानीय रेपो उपयोग -o का उपयोग करने के लिए मजबूर करने की कोशिश की?


तो आप प्लगइन संस्करण कैसे निर्दिष्ट करते हैं? मुझे यकीन है कि मेरे पास POM में संस्करण सेट है ... क्या आप अधिक विशिष्ट हो सकते हैं?
क्वार्क

अच्छी तरह से अगर आपके पास एक versionतत्व है, pluginतो आपने वास्तव में इसे कॉन्फ़िगर किया है, अगर मैं विचारों से बाहर हूं ... सौभाग्य
गाब

मेरे मामले में संस्करण एक सीमा थी [12.1 12.2) और मेटाडेटा कैश 24 घंटे के लिए सेट किया गया था, इसलिए यह प्रत्येक दिन पहले एक नए संस्करण की जांच करेगा
mzzzzb

डिफ़ॉल्ट प्लगइन्स के बारे में क्या? जैसे कि maven-surefire-common, जो मैंने निर्दिष्ट नहीं किया है?
यंगीनि

उनके संस्करण एक दिए गए मावेन रिलीज के लिए तय किए गए हैं, लेकिन आप एक अलग pluginManagementअनुभाग का उपयोग करने के लिए मजबूर कर सकते हैं
गैब

0

मैंने अभी तक अध्ययन नहीं किया है, जब मावेन जो दिखता है-अप करता है, लेकिन स्थिर और प्रतिलिपि प्रस्तुत करने योग्य बिल्ड प्राप्त करने के लिए, मैं दृढ़ता से अनुशंसा करता हूं कि सीधे मावेन रिपॉजिटरी का उपयोग न करें लेकिन नेक्सन जैसे मावेन रिपोजिटरी प्रबंधक का उपयोग करें।

यहाँ ट्यूटोरियल कैसे अपनी सेटिंग्स फ़ाइल सेट करने के लिए है:

http://books.sonatype.com/nexus-book/reference/maven-sect-single-group.html

http://maven.apache.org/repository-management.html


@acdcjunior जैसा कि मैंने कहा, मैंने अभी तक इसका अध्ययन नहीं किया है। लेकिन एक स्थानीय Maven भंडार प्रबंधक का उपयोग कर के रूप में अच्छी तरह से इन मुद्दों का सबसे समाधान होगा (अगर मेटाडाटा के लिए Maven चेकों यह केवल अपने Maven भंडार प्रबंधक तक पहुँच)
puce

1
IMHO एक रेपो प्रबंधक केवल अनावश्यक डाउनलोड से बचने के लिए और विशेष रूप से इस संगठन (जैसे मूल माता-पिता और आंतरिक मॉड्यूल) की कलाकृतियों को तैनात करने के लिए एक संगठन के अंदर उपयोगी है। अन्यथा क्यों एक अतिरिक्त दर्पण जोड़ने के रूप में आप पहले से ही स्थानीय एक है?
गब

@ मैं नहीं देखता कि इस मुद्दे को कैसे हल किया जाएगा। यदि आप नेटवर्क पर मेटाडेटा के लिए जाँच करने के लिए मावेन नहीं चाहते हैं, तो इससे कोई फर्क नहीं पड़ता कि यह इंटरनेट से या इंट्रानेट रेपो प्रबंधक से जाँच करता है।
ईस

@ यदि यह "इंटरनेट कनेक्शन फ़्लैंकी" है या यदि रिपॉजिटरी सर्वर में से एक वर्तमान में उपलब्ध नहीं है, तो यह मदद करनी चाहिए, क्योंकि आप केवल अपने लैन में मावेन रिपोज़िटरी मैनेजर तक पहुँच प्राप्त कर रहे हैं।
puce

@ गैप, जबकि रेपो मैनेजर आपके द्वारा बताए गए कारणों के लिए एक संगठन में विशेष रूप से उपयोगी हैं, एक रेपो मैनेजर भी स्थिर और प्रतिलिपि प्रस्तुत करने योग्य बिल्ड प्राप्त करने के लिए महत्वपूर्ण है, जो कि आमतौर पर मैं इस परियोजना के लिए केवल डेवलपर होने के बावजूद भी लक्ष्य रखता हूं। यह आश्वासन देता है कि मैं अपने स्थानीय रेपो को मिटा सकता हूं और अभी भी सभी बिल्डों को पुन: पेश करने में सक्षम हूं और अन्य डेवलपर्स आसानी से परियोजना में शामिल हो सकते हैं। मैं जेनकिन्स के साथ यह आश्वासन देता हूं, जो कभी-कभी स्थानीय रूप से भी चलता है, रेपो प्रबंधक तक भी पहुंच बनाता है और मेरी परियोजनाओं को जारी करने में भी मदद करता है -> 2 उपयोगकर्ता रेपो प्रबंधक तक
पहुंचते हैं

0

मावेन ऐसा इसलिए करता है क्योंकि आपकी निर्भरता एक स्नैपशॉट संस्करण में है और मावेन के पास रिपॉजिटरी में उस स्नैपशॉट संस्करण में किए गए किसी भी बदलाव का पता लगाने का कोई तरीका नहीं है। अपनी कलाकृतियों को जारी करें और संस्करण को pom.xml में बदलकर उस संस्करण में रखें और मावेन अब मेटाडेटा फ़ाइल नहीं लाएगा।

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