2015-12-10 20 views
8

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

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

हमारा मुख्य निर्माण एक DockerFile JDK, Maven स्थापित करने के लिए कई कदम उठाए, आदि है कि तो यह एक

COPY ./pom.xml /opt/inbot-api/pom.xml RUN mvn dependency:copy-dependencies clean

यह स्थानीय Maven भंडार के लिए उनकी निर्भरता डाउनलोड करें और फिर होगा की सफाई करता है लक्ष्य निर्देशिका।

फिर हम स्रोत पेड़ को छवि में कॉपी करते हैं और पूर्ण निर्माण चलाते हैं।

COPY ./src /opt/inbot-api/src RUN mvn -e clean install

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

हमारे डॉकरफ़ाइल के लिए बहुत कुछ है जो यहां इतना प्रासंगिक नहीं है लेकिन आखिरकार यह हमारे संकलित कलाकृतियों, एक nginx कॉन्फ़िगरेशन और हमारी सभी रनटाइम निर्भरताओं के साथ एक डॉकर फ़ाइल बनाता है जिसे हम ईसीएस पर तैनात कर सकते हैं।

mvn clean install को छोड़कर यह लगभग काम करता है, फिर भी हर बिल्ड पर अतिरिक्त प्लगइन निर्भरता डाउनलोड करता है। इसलिए, ये निर्भरताएं हैं कि प्रति-निर्भरता चरण शामिल नहीं है।

मेरा प्रश्न, मैं प्लगइन निर्भरताओं समेत सभी निर्भरताओं को डाउनलोड करने के लिए RUN mvn dependency:copy-dependencies clean कैसे प्राप्त करूं। मैंने लोगों को वास्तव में mvn dependency:copy-dependencies clean के बजाय mvn verify clean पर देखा है, लेकिन यह हमारे मामले में धीमा है। मैं सोच रहा था कि ऐसा करने का एक बेहतर तरीका है या नहीं।

मैं इसे सुधारने के तरीके पर किसी भी प्रतिक्रिया की सराहना करता हूं।

अद्यतन

अब मैं एक

RUN mvn -B -T 4 dependency:copy-dependencies dependency:resolve-plugins dependency:go-offline clean

करते हैं और यह अभी भी mvn clean install उसके बाद के साथ और अधिक सामान डाउनलोड करता है। dependency:go-offline के बावजूद mvn -o clean install अभी भी विफल रहता है। तो, ऐसा लगता है कि यह प्लगइन टूट गया है।

+0

मैं 'mvn निर्भरता उपयोग करने के लिए सुझाव है कि प्लगइन के लिए: हल-plugins' https देखें: //maven.apache। org/plugins/Maven-निर्भरता-प्लगइन/हल-प्लगइन्स-मोजो।एचटीएमएल – khmarbaise

+0

धन्यवाद, जो समस्या हल करता है। –

उत्तर

1

mvn dependency:resolve-plugins

उपयोग करने के लिए दस्तावेज़ देखें मैं सुझाव है कि प्लगइन के लिए: https://maven.apache.org/plugins/maven-dependency-plugin/

+0

यह लगभग काम करता है लेकिन यह अभी भी कुछ अन्य सामान डाउनलोड करता है जब मैं 'एमवीएन निर्भरता करता हूं: प्रति-निर्भरता निर्भरता: संकल्प-प्लगइन्स साफ़'। मैंने दूसरे एमवीएन आमंत्रण को चलाने की कोशिश की और फिर यह विफल हो गया: इन निर्भरताओं के बारे में शिकायत: "निम्नलिखित कलाकृतियों को हल नहीं किया जा सका: org.apache.maven.reporting: maven-reports-api: jar: 2.0.9, org .apache.maven.doxia: डॉक्सिया-सिंक-एपीआई: जार: 1.0-अल्फा -10 "ऐसा लगता है कि यह अप्रत्यक्ष रूप से मैवेन एनफोर्स प्लगइन द्वारा उपयोग किया जाता है, जिसे हम वास्तव में उपयोग करते हैं। –

+0

दूसरा आमंत्रण अतिरिक्त डाउनलोड चला रहा है क्योंकि आप पहली बार 'इंस्टॉल' बिल्टिन लक्ष्य को कॉल कर रहे हैं। यदि आप अपने एमवीएन को पहले आमंत्रण (स्रोत जोड़ने से पहले) में 'इंस्टॉल' लक्ष्य जोड़ते हैं तो आप अपनी समस्या का समाधान करेंगे। – Trastle

संबंधित मुद्दे