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

और वास्तव में यह है कि मावेन अपने निर्माण लॉग में अद्वितीय स्ट्रिंग के माध्यम से इसे (इसकी सबसे छोटी इकाई) दिखाता है:
plugin-artifactId:plugin-version:plugin-goal (goal-execution-id) @ project-name
उदाहरण के लिए, हमारे पास होगा:
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ sample-project ---
जिसका वास्तव में मतलब है (विभिन्न स्तरों के माध्यम से)
compileचरण के दौरान (उल्लेख नहीं, दुर्भाग्य से)>
- मैं मावेन कंपाइलर प्लग इन (
artifactIdऔर version)> इनवॉइस कर रहा हूं
- मैं इसका
compileलक्ष्य प्राप्त कर रहा हूं >
- जैसा कि
default-compileनिष्पादन द्वारा परिभाषित किया गया है
यह अद्वितीय है क्योंकि वास्तव में आप एक ही लक्ष्य (एक ही प्लगइन का) अलग-अलग चरणों में या एक ही चरण में हो सकते हैं, लेकिन अलग-अलग निष्पादन में (जो कि अलग-अलग कॉन्फ़िगरेशन के साथ)। maven-compiler-pluginउदाहरण के तौर पर भी के दौरान प्रयोग किया जाता है test-compileचरण संकलन परीक्षण कोड के लिए (एक अलग चरण) (इसके माध्यम से testCompileएक अलग निष्पादन में लक्ष्य) ( default-testCompile)। आप एक ही चरण के दौरान कुछ ऑटो-जनरेटेड कोड (एक ही प्लगइन और लक्ष्य का उपयोग करके) संकलित कर सकते हैं जैसा कि एक निष्पादन द्वारा परिभाषित किया गया था जिसे आपने पीओएम (और संभवतः एक अलग कॉन्फ़िगरेशन) निर्दिष्ट किया था।
डिफ़ॉल्ट निष्पादन मावेन पैकेजिंग बाइंडिंग के माध्यम से आउट-ऑफ-द-बॉक्स प्रदान किए जाते हैं , अर्थात् डिफ़ॉल्ट रूप से (और कॉन्फ़िगरेशन पर कन्वेंशन को लागू करना) मावेन पहले से ही कुछ चरणों के दौरान कुछ लक्ष्यों (मानक प्लगइन्स के) को आमंत्रित करता है। इन डिफ़ॉल्ट इनवॉइस के निष्पादन आईडी को कुछ सम्मेलनों के अनुसार परिभाषित किया गया है ।
यह भी बताता है कि यदि आप वास्तव में एक मावेन बिल्ड के डिफ़ॉल्ट व्यवहार (बाध्यकारी) को ओवरराइड करना चाहते हैं, तो आपको उसी प्लगइन के लिए अपने POM में बिल्कुल एक ही निष्पादन आईडी निर्दिष्ट करना (ओवरराइड) करना होगा। उदाहरण के लिए, आप केवल एक maven-compiler-pluginही default-compileआईडी के साथ निष्पादन को परिभाषित करने के लिए संकलन छोड़ सकते हैं, लेकिन एक गैर मौजूदा चरण (या खाली स्थान) के लिए बाध्य हो सकते हैं।
इसे छोटा करने के लिए : एक निष्पादन मावेन को बताता है कि किस चरण में किस कॉन्फ़िगरेशन को निष्पादित करना है।
कुछ निष्पादनों को डिफ़ॉल्ट (डिफॉल बाइंडिंग) द्वारा प्रदान किया जाता है, जो बताता है कि सिर्फ 6 लाइनों का मावेन न्यूनतम पोम पहले से ही बहुत कुछ कर सकता है (संकलन, परीक्षण, पैकेज, आदि): कुछ चरणों में मानक प्लगइन्स के लक्ष्यों को निष्पादित करना, यह कन्वेंशन है। विन्यास। फिर, कॉन्फ़िगरेशन के माध्यम से आप पहले से कॉन्फ़िगर किए गए प्लगइन्स के व्यवहार को बनाने या प्रभावित करने के लिए सामान (निष्पादन) जोड़ सकते हैं (इस मामले में कोई अनुभाग नहीं है , लेकिन बस पर्याप्त होगा)।pom.xmlexecutionsconfiguration
हां, आप साइकिल (और उनके चरणों) का निर्माण कर सकते हैं और सीधे गोल (प्लगिन के) कर सकते हैं। निम्नलिखित की कल्पना करें:
mvn compiler:compile
mvn compiler:testCompile
mvn surefire:test
mvn jar:jar
(नोट: आप इनलाइन को केवल एक कॉल में भी आमंत्रित कर सकते हैं)
यहां हम ऐप कोड, टेस्ट कोड, परीक्षणों का परीक्षण और पैकेज संकलित कर रहे हैं: कल्पना करें कि यह मैनुअल, त्रुटि-प्रवण, दोहराव और समय लेने वाली कैसे होगी। कॉन्फ़िगरेशन पर कन्वेंशन हमारी मदद करता है: मावेन जीवन चक्र और चरणों का निर्माण करता है । डिफ़ॉल्ट जीवन चक्र (जिसका कोई नाम नहीं है, जो कि डिफ़ॉल्ट है), सर्वोत्तम प्रथाओं और सम्मेलनों (मावेन के मंत्र) के आधार पर चरणों की एक श्रृंखला प्रदान करता है।
यदि आप ऊपर के समान प्राप्त करना चाहते हैं, तो बस चलाएं: mvn packageऔर यह स्वचालित रूप से आपके प्रोजेक्ट को संकलित, परीक्षण और पैकेज करेगा। कैसे? प्लगइन्स का आह्वान। अर्थात्, चरण प्लगइन्स (लक्ष्यों) के सार्थक और विन्यास योग्य सेट हैं। इसे और अधिक मानक बनाने के लिए, प्रत्येक चरण के लिए मावेन सबसे पहले किसी भी पूर्ववर्ती चरण को लागू करेगा, ताकि यदि आप परीक्षण करना चाहते हैं, तो आप सुनिश्चित करेंगे कि आप पहले संकलन करेंगे।
पीएस ध्यान दें कि जब एक ही के लिए कई लक्ष्यों को निर्दिष्ट करते हैं execution, तो आप अभी भी बिल्ड लॉग में दो अलग-अलग लक्ष्यों (एक ही आईडी के साथ) को दो अलग-अलग लक्ष्यों के लिए स्पष्ट रूप से देखेंगे (इसलिए, अभी भी अद्वितीय ट्यूपल)।