मावेन लक्ष्यों और चरणों के बीच अंतर / संबंध क्या है? वे एक दूसरे से कैसे संबंधित हैं?
मावेन लक्ष्यों और चरणों के बीच अंतर / संबंध क्या है? वे एक दूसरे से कैसे संबंधित हैं?
जवाबों:
लक्ष्यों को चरणों में निष्पादित किया जाता है जो आदेश लक्ष्यों को निष्पादित करने में सहायता करने में मदद करता है। इस की सबसे अच्छी समझ डिफ़ॉल्ट मावेन जीवन चक्र बाइंडिंग को देखना है जो दिखाता है कि कौन से लक्ष्यों को डिफ़ॉल्ट रूप से चरणबद्ध रूप से चलाया जाता है। संकलन चरण के लक्ष्यों को हमेशा परीक्षण चरण के लक्ष्यों से पहले निष्पादित किया जाएगा जो हमेशा पैकेज चरण के लक्ष्यों और इतने पर से पहले निष्पादित किया जाएगा।
भ्रम का हिस्सा इस तथ्य से बढ़ा है कि जब आप मावेन निष्पादित करते हैं तो आप एक लक्ष्य या एक चरण निर्दिष्ट कर सकते हैं। यदि आप एक चरण निर्दिष्ट करते हैं तो मावेन आपके द्वारा निर्दिष्ट चरण में सभी चरणों को चलाएगा (जैसे यदि आप पैकेज निर्दिष्ट करते हैं तो यह पहले संकलन चरण और फिर परीक्षण चरण और अंत में पैकेज चरण के माध्यम से चलेगा) और प्रत्येक चरण के लिए यह होगा उस चरण से जुड़े सभी लक्ष्य चलाएं।
जब आप अपनी मावेन बिल्ड फ़ाइल में एक प्लगइन निष्पादन बनाते हैं और आप केवल लक्ष्य को निर्दिष्ट करते हैं तो यह उस लक्ष्य को एक निश्चित डिफ़ॉल्ट चरण में बांध देगा। उदाहरण के लिए, jaxb: xjc लक्ष्य डिफ़ॉल्ट रूप से जनरेट-रिसोर्स चरण में बांधता है। हालाँकि, जब आप निष्पादन को निर्दिष्ट करते हैं तो आप उस लक्ष्य के लिए चरण को भी स्पष्ट रूप से निर्दिष्ट कर सकते हैं।
यदि आप मावेन को निष्पादित करते समय एक लक्ष्य निर्दिष्ट करते हैं तो यह उस लक्ष्य को और केवल उस लक्ष्य को चलाएगा। दूसरे शब्दों में, यदि आप जार: जार लक्ष्य को निर्दिष्ट करते हैं तो यह केवल जार को चलाएगा: जार कोड को अपने कोड को जार में पैकेज करने के लिए। यदि आपने पहले संकलन लक्ष्य नहीं चलाया है या अपने संकलित कोड को किसी अन्य तरीके से तैयार किया है तो यह बहुत असफल हो सकता है।
mvn archetype:generate
और उस मामले में केवल लक्ष्य को निष्पादित करता है?
mvn test
रन:, --- maven-resources-plugin:2.6:resources ... --- maven-compiler-plugin:3.1:compile ... --- maven-resources-plugin:2.6:testResources ... --- maven-compiler-plugin:3.1:testCompile ... --- maven-surefire-plugin:2.12.4:test
जबकि mvn compiler:testCompile
बस चलता है --- maven-compiler-plugin:3.1:testCompile ...
।
mvn clean compiler:testCompile
रन के --- maven-clean-plugin:2.5:clean ... --- maven-compiler-plugin:3.1:testCompile
साथ विफल रहता है Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-cli) on project mvnphase: Compilation failure ... cannot find symbol ... symbol: variable MvnPhase
(जहां MvnPhase
परीक्षण कक्षा में संदर्भित परीक्षण के तहत कक्षा है)। यदि किसी लक्ष्य को सामूहिक रूप से आमंत्रित किया जाता है, तो स्पष्ट रूप से चरणों का आह्वान नहीं किया जाता है।
जीवन चक्र नाम चरणों का एक क्रम है ।
चरण क्रमिक रूप से निष्पादित होते हैं। किसी चरण को निष्पादित करने का मतलब पिछले सभी चरणों को निष्पादित करता है।प्लगइन का एक संग्रह है लक्ष्यों (यह भी कहा जाता है मोजो एम Aven हे ld जम्मू एवा हे bject)।
सादृश्य: प्लगइन एक वर्ग है और लक्ष्य वर्ग के भीतर विधियां हैं।
मावेन एक बिल्ड लाइफ साइकिल की केंद्रीय अवधारणा के आसपास आधारित है । प्रत्येक के अंदर बिल्ड जीवन चक्र देखते हैं चरण बिल्ड , और प्रत्येक के अंदर के चरण बिल्ड देखते हैं लक्ष्य बिल्ड ।
हम एक निर्माण चरण या निर्माण लक्ष्य पर अमल कर सकते हैं। बिल्ड चरण को निष्पादित करते समय हम उस बिल्ड चरण के सभी निर्माण लक्ष्यों को निष्पादित करते हैं। बिल्ड लक्ष्य एक या अधिक चरणों के निर्माण के लिए दिए गए हैं। हम एक निर्माण लक्ष्य को सीधे निष्पादित भी कर सकते हैं।
तीन प्रमुख बिल्ट-इन बिल्ड लाइफ साइकिल हैं :
प्रत्येक बिल्ड लाइफसाइकल चरणों से बना है
उदाहरण के लिए default
जीवनचक्र में निम्नलिखित बिल्ड चरण शामिल हैं :
◾validate - validate the project is correct and all necessary information is available
◾compile - compile the source code of the project
◾test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
◾package - take the compiled code and package it in its distributable format, such as a JAR.
◾integration-test - process and deploy the package if necessary into an environment where integration tests can be run
◾verify - run any checks to verify the package is valid and meets quality criteria
◾install - install the package into the local repository, for use as a dependency in other projects locally
◾deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.
इसलिए उपरोक्त चरणों से गुजरने के लिए, हमें केवल एक कमांड को कॉल करना होगा:
mvn <phase> { Ex: mvn install }
पहले चरण से शुरू होने वाले उपरोक्त आदेश के लिए, सभी चरणों को 'इंस्टॉल' चरण तक क्रमिक रूप से निष्पादित किया जाता है। mvn
निम्नानुसार एक लक्ष्य या एक चरण (या यहां तक कि कई लक्ष्य या कई चरण) निष्पादित कर सकते हैं:
mvn clean install plugin:goal
हालाँकि, यदि आप अपने प्लगइन को संदर्भित करने के लिए उपयोग किए गए उपसर्ग को अनुकूलित करना चाहते हैं, तो आप maven-plugin-plugin
अपने प्लगइन के पीओएम में कॉन्फ़िगरेशन पैरामीटर के माध्यम से सीधे उपसर्ग निर्दिष्ट कर सकते हैं ।
एक बिल्ड चरण प्लगिन लक्ष्यों से बना है
मावेन की अधिकांश कार्यक्षमता प्लगइन्स में है। एक प्लगइन लक्ष्यों का एक सेट प्रदान करता है जिसे निम्नलिखित सिंटैक्स का उपयोग करके निष्पादित किया जा सकता है:
mvn [plugin-name]:[goal-name]
उदाहरण के लिए, एक जावा प्रोजेक्ट को संकलक-प्लगइन के संकलन-लक्ष्य के साथ चलाकर संकलित किया जा सकता है mvn compiler:compile
।
बिल्ड जीवनचक्र नामित चरणों की एक सूची है जिसका उपयोग लक्ष्य निष्पादन के लिए आदेश देने के लिए किया जा सकता है।
प्लगइन्स द्वारा दिए गए लक्ष्य जीवनचक्र के विभिन्न चरणों से जुड़े हो सकते हैं। उदाहरण के लिए, डिफ़ॉल्ट रूप से, लक्ष्य चरण केcompiler:compile
साथ जुड़ा हुआ है , जबकि लक्ष्य चरण के साथ जुड़ा हुआ है । निम्नलिखित आदेश पर विचार करें: compile
surefire:test
test
mvn test
जब पूर्ववर्ती आदेश को निष्पादित किया जाता है, तो मावेन चरण के प्रत्येक चरण तक और उससे जुड़े सभी लक्ष्यों को चलाता है test
। ऐसे मामले में, मावेन चरण से resources:resources
जुड़े लक्ष्य को चलाता है process-resources
, फिर compiler:compile
, और तब तक जब तक कि वह अंत में surefire:test
गोल नहीं चलाता ।
हालाँकि, भले ही एक बिल्ड चरण बिल्ड जीवन चक्र में एक विशिष्ट चरण के लिए ज़िम्मेदार हो, लेकिन जिस तरह से यह उन जिम्मेदारियों को वहन करता है वह भिन्न हो सकता है। और यह उन बिल्ड चरणों के लिए बाध्य प्लगइन लक्ष्यों को घोषित करके किया जाता है।
एक प्लगइन लक्ष्य एक विशिष्ट कार्य (बिल्ड चरण की तुलना में महीन) का प्रतिनिधित्व करता है जो परियोजना के निर्माण और प्रबंधन में योगदान देता है। यह शून्य या अधिक बिल्ड चरणों के लिए बाध्य हो सकता है। किसी भी निर्माण चरण के लिए बाध्य नहीं होने वाले लक्ष्य का निर्माण जीवनचक्र के बाहर प्रत्यक्ष आह्वान द्वारा किया जा सकता है। निष्पादन का क्रम उस क्रम पर निर्भर करता है जिसमें लक्ष्य (एस) और बिल्ड चरण (ओं) को लागू किया जाता है। उदाहरण के लिए, नीचे दिए गए आदेश पर विचार करें। clean
और package
तर्क, निर्माण चरण होते हैं, जबकि dependency:copy-dependencies
(एक प्लगइन की) एक लक्ष्य है।
mvn clean dependency:copy-dependencies package
यदि इसे निष्पादित किया जाना था, तो clean
चरण को पहले निष्पादित किया जाएगा (जिसका अर्थ है कि यह स्वच्छ जीवनचक्र के सभी पूर्ववर्ती चरणों को चलाएगा, साथ ही clean
चरण), और फिर dependency:copy-dependencies
लक्ष्य को अंतिम रूप से निष्पादित करने से पहले package
चरण (और उसके सभी पूर्ववर्ती चरणों का निर्माण करेगा) डिफ़ॉल्ट जीवनचक्र)।
इसके अलावा, यदि कोई लक्ष्य एक या अधिक चरणों का निर्माण करने के लिए बाध्य है, तो उस लक्ष्य को उन सभी चरणों में बुलाया जाएगा।
इसके अलावा, एक निर्माण चरण में शून्य या उससे अधिक गोल भी हो सकते हैं। यदि एक बिल्ड चरण के पास कोई लक्ष्य नहीं है, तो वह बिल्ड चरण निष्पादित नहीं करेगा। लेकिन अगर इसके पास एक या अधिक लक्ष्य हैं, तो यह उन सभी लक्ष्यों को पूरा करेगा।
अंतर्निहित जीवनचक्र बाइंडिंग
कुछ चरणों में डिफ़ॉल्ट रूप से उनके लिए लक्ष्य होते हैं। और डिफ़ॉल्ट जीवनचक्र के लिए, ये बाइंडिंग पैकेजिंग मूल्य पर निर्भर करती है।
मावेन वास्तुकला:
मैवेन लाइफसाइकल मैपिंग के लिए ग्रहण का नमूना
[plugin-name]
उदाहरण mvn [plugin-name]:[goal-name]
में बल्कि एक प्लगइन उपसर्ग है । mvn clean install
न केवल " एक मल्टी-मॉड्यूल परिदृश्य में उपयोग किया जा सकता है "। मल्टी-मॉड्यूल एक बिल्कुल अलग विषय है।
चुना गया उत्तर बहुत अच्छा है, लेकिन फिर भी मैं इस विषय में कुछ जोड़ना चाहूंगा। एक उदाहरण।
यह स्पष्ट रूप से प्रदर्शित करता है कि अलग-अलग चरणों को अलग-अलग प्लगइन्स पर कैसे बांधा जाता है और उन प्लगइन्स को जो लक्ष्य सामने आते हैं।
तो, चलिए कुछ को चलाने के मामले की जाँच करते हैं mvn compile
:
mvn compile
लिए एक विशिष्ट लक्ष्य, संकलित लक्ष्य के लिए मैप किया गया है।mvn compiler:compile
इसलिए, चरण प्लगइन लक्ष्यों से बना है ।
संदर्भ से लिंक करें
mvn test
की ओर इशारा करते package
हैं, और mvn install
की ओर इशारा करते deploy
?
jar
प्लगइन वास्तव में package
चरण में चलता है । और चरणों और प्लगइन्स के बीच सैंडविच में पोम थोड़ा भ्रामक है (मुझे लगता है कि इसका मतलब यह होना चाहिए कि पोम में आप डिफ़ॉल्ट बाइंडिंग के अलावा कौन से प्लग इन चरणों में चला सकते हैं) को कॉन्फ़िगर कर सकते हैं। सामान्य सिद्धांत सही है, यद्यपि।
मावेन साइट के पेज इंट्रोडक्शन टू बिल्ड लाइफसाइकल पर परिभाषाएँ विस्तृत हैं , लेकिन मैंने संक्षेप में बताने की कोशिश की है :
मावेन एक निर्माण प्रक्रिया के 4 मदों को परिभाषित करता है:
जीवन चक्र
तीन में निर्मित lifecycles (उर्फ निर्माण lifecycles ): default
, clean
, site
। ( जीवनचक्र संदर्भ )
चरण
प्रत्येक जीवन चक्र से बना है चरणों के लिए, जैसे default
जीवन चक्र: compile
, test
, package
, install
, आदि
लगाना
एक कलाकृति जो एक या अधिक लक्ष्य प्रदान करती है।
पैकेजिंग के प्रकार ( jar
, war
आदि) के आधार पर , प्लगइन्स के लक्ष्य डिफ़ॉल्ट रूप से चरणों में बंधे होते हैं। ( अंतर्निहित जीवनचक्र बाइंडिंग )
लक्ष्य
वह कार्य (क्रिया) जिसे अंजाम दिया गया हो। एक प्लगइन में एक या अधिक गोल हो सकते हैं।
पीओएम में एक प्लगइन को कॉन्फ़िगर करते समय एक या अधिक लक्ष्यों को निर्दिष्ट करने की आवश्यकता होती है । इसके अतिरिक्त, यदि किसी प्लगइन में एक डिफ़ॉल्ट चरण परिभाषित नहीं है, तो निर्दिष्ट लक्ष्य (एस) एक चरण के लिए बाध्य हो सकता है।
मावेन के साथ मंगाया जा सकता है:
clean
, package
)<plugin-prefix>:<goal>
(उदा dependency:copy-dependencies
)<plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
(उदा org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile
)किसी एक या सभी के एक या अधिक संयोजनों के साथ, जैसे:
mvn clean dependency:copy-dependencies package
Build Phase
, तो मैं इसे एक जीवनचक्र के दूसरे चरण के रूप में समझता हूं, और यह मुझे भ्रमित करता है।
मेरा मानना है कि एक अच्छा जवाब पहले से ही प्रदान की जाती है, लेकिन मैं अलग 3 जीवन-चक्र (का एक आसान करने के लिए अनुवर्ती चित्र जोड़ना चाहते हैं build
, clean
और site
) और प्रत्येक में चरणों।
बोल्ड में चरण - आमतौर पर उपयोग किए जाने वाले मुख्य चरण हैं।
generate-resources
दो बार दिखाई देता है और generate-sources
गायब है।
इसका श्रेय संदीप जिंदल और प्रेमराज को जाता है। उनका स्पष्टीकरण मुझे इस बारे में थोड़ी देर के बाद भ्रमित होने में समझने में मदद करता है।
मैंने कुछ पूर्ण कोड उदाहरण और कुछ सरल व्याख्याएं यहां बनाईं https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/ । मुझे लगता है कि इससे दूसरों को समझने में मदद मिल सकती है।
लिंक से संक्षेप में, आपको तीनों को एक साथ समझने की कोशिश नहीं करनी चाहिए, पहले आपको इन समूहों में संबंध को समझना चाहिए:
1. जीवन चक्र बनाम चरण
जीवन चक्र का एक संग्रह है चरण अनुक्रम में यहाँ देख जीवन चक्र संदर्भ । जब आप किसी चरण को कॉल करते हैं , तो यह सभी चरण को भी इससे पहले कॉल करेगा ।
उदाहरण के लिए, स्वच्छ जीवन चक्र के 3 चरण होते हैं ( पूर्व-स्वच्छ, स्वच्छ, पश्च-स्वच्छ )।
mvn clean
इसे प्री-क्लीन और क्लीन कहा जाएगा ।
2. प्लगइन बनाम लक्ष्य
लक्ष्य प्लगइन में एक कार्रवाई की तरह है । इसलिए यदि प्लगइन एक वर्ग है, तो लक्ष्य एक विधि है।
आप इस तरह एक लक्ष्य को कॉल कर सकते हैं:
mvn clean:clean
इसका अर्थ है "स्वच्छ लक्ष्य को कॉल करें, स्वच्छ प्लगइन में" (यहां कुछ भी साफ चरण से संबंधित नहीं है। "स्वच्छ" शब्द को आपको भ्रमित न करने दें, वे समान नहीं हैं!)
3. अब चरण और लक्ष्य के बीच का संबंध:
लक्ष्य (ओं) के चरण (पूर्व) लिंक कर सकते हैं। उदाहरण के लिए, सामान्य रूप से, स्वच्छ चरण स्वच्छ लक्ष्य से जुड़ता है। इसलिए, जब आप इस आदेश को कहते हैं:
mvn clean
यह पूर्व-स्वच्छ चरण और स्वच्छ चरण को कॉल करेगा जो स्वच्छ: स्वच्छ लक्ष्य से जोड़ता है।
यह लगभग समान है:
mvn pre-clean clean:clean
अधिक विवरण और पूर्ण उदाहरण https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/ में हैं
Maven कार्यरत शब्दावली जिसमें चरण और लक्ष्य होते हैं।
चरण: मेवेन चरण कार्रवाई का एक सेट है जो 2 या 3 लक्ष्यों से जुड़ा होता है
exmaple: - यदि आप mvan को क्लीन चलाते हैं
यह चरण मवन क्लीन: क्लीन को निष्पादित करेगा
लक्ष्य: चरण के साथ बंधे मावेन गोल
संदर्भ के लिए http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-structure.html
निम्नलिखित तीन बिल्ट-इन बिल्ड जीवनचक्र हैं:
जीवनचक्र डिफ़ॉल्ट -> [मान्य करें, आरंभ करें, उत्पन्न-स्रोत, प्रक्रिया-स्रोत, उत्पन्न-संसाधन, प्रक्रिया-संसाधन, संकलन, प्रक्रिया-वर्ग, जनन-परीक्षण-स्रोत, प्रक्रिया-परीक्षण-स्रोत, जनन-परीक्षण-संसाधन, प्रक्रिया -टेस्ट-रिसोर्स, टेस्ट-कंपाइल, प्रोसेस-टेस्ट-क्लास, टेस्ट, तैयारी-पैकेज, पैकेज, प्री-इंटीग्रेशन-टेस्ट, इंटीग्रेशन-टेस्ट, पोस्ट-इंटीग्रेशन-टेस्ट, वेरिफाई, इंस्टॉल, तैनाती]
जीवनचक्र साफ -> [पूर्व-स्वच्छ, स्वच्छ, पश्च-स्वच्छ]
जीवनचक्र साइट -> [पूर्व-साइट, साइट, पोस्ट-साइट, साइट-परिनियोजन]
प्रवाह अनुक्रमिक है, उदाहरण के लिए, डिफ़ॉल्ट जीवनचक्र के लिए, यह मान्य से शुरू होता है , फिर आरंभ होता है और इसी तरह ...
आप डिबग मोड को सक्षम करके जीवनचक्र की जाँच कर सकते हैं mvn
,mvn -X <your_goal>