मेरा सामान्य नियम सामान्य निर्माण प्रक्रिया में <ant>
या <subant>
का उपयोग नहीं करना है क्योंकि यह निर्भरता जांच को तोड़ता है। हमने डेवलपर को बिल्ड.एक्सएमएल को सात अलग-अलग बिल्ड फाइलों में तोड़ दिया था, और अन्य बिल्ड फाइलों में सामान करने के लिए <ant>
कार्यों की निरंतर कॉलिंग के कारण, वह 14 बार तक एक ही लक्ष्य को निष्पादित कर रहा था। और, फिर उसने सोचा कि उसका निर्माण इतना लंबा क्यों ले रहा था। सात बिल्ड फ़ाइलों को एक साथ build.xml
में एक साथ जोड़कर depends
<target>
पैरामीटर का उपयोग करके निर्माण को दो मिनट से भी कम समय तक छोटा कर दिया गया।
हालांकि, इस मामले में आपके पास वास्तव में दो अलग-अलग परियोजनाएं हैं और एक build.xml
है जिसे आप उन दो अलग-अलग परियोजनाओं को कॉल करने के लिए उपयोग कर रहे हैं। इस मामले में, से <ant>
और <subant>
कॉल का उपयोग करके आप बेहतर हैं।
- ये कॉल
${basedir}
में हस्तक्षेप नहीं करेंगे।
- ये कॉल आपको यह निर्दिष्ट करने की अनुमति देते हैं कि आप इन अलग-अलग फ़ाइलों में कौन से गुण और संसाधन शामिल करना चाहते हैं। (संभावित उत्तर कोई नहीं) है।
- आपको एक ही नाम साझा करने वाले एकाधिक लक्ष्यों के साथ कोई समस्या नहीं है। आपके क्लाइंट बिल्ड में संकलित लक्ष्य आपके सर्वर निर्माण में
_compile_
लक्ष्य को ओवरलैप नहीं करेगा।
सुबंट अधिक शक्तिशाली है, लेकिन कार्यान्वित करने के लिए कठिन है। सुबांत के साथ, आप इसे build.xml फ़ाइलों के लिए खोज सकते हैं। <ant>
का उपयोग करने में अधिकांश समय बस आसान होता है और जो भी आप चाहते हैं वह करता है।
मैं वास्तव में सिफारिश करता हूं कि निर्भरता के मुद्दों को संभालने के लिए आइवी का उपयोग करना है। न केवल आईवी आपके क्लाइंट में सर्वर निर्भरता को संभाल सकता है, बल्कि यह सभी तृतीय पक्ष जार निर्भरताओं को भी संभाल सकता है। आपकी परियोजनाओं में और अधिक भंडारित जर्फ़ाइल नहीं। जब आप किसी प्रोजेक्ट में जार फ़ाइलों को स्टोर करते हैं, तो आप उनके वास्तविक संस्करण और उनके इतिहास के बारे में जानकारी खो देते हैं। आप अपनी परियोजना में commons-io.jar
देखते हैं, और आपको पता नहीं है कि यह कौन सा संस्करण था या यहां तक कि यदि यह आधिकारिक 'कॉमन्स-io.jar है, या आपके डेवलपर्स में से एक ने इसे किसी बिंदु के रूप में मंग किया है।
समस्या यह है कि आईवी लागू करने के लिए थोड़ा सा काम करता है। आपको Nexus, Artifactory, या Archiva जैसे आइवी रिपोजिटरी मैनेजर का उपयोग करने की आवश्यकता है। (असल में, ये मेवेन रिपोजिटरी प्रबंधक हैं, लेकिन आइवी उनके साथ काफी अच्छी तरह से काम करता है।)
फिर, आप अपने
Maven
आइवी भंडार सर्वर को इंगित करने के लिए अपने प्रोजेक्ट में ivy.jar
आयात और ivysettings.xml
फ़ाइल प्राप्त करने की आवश्यकता।
आप अपने संस्करण नियंत्रण प्रणाली के रूप में सबवर्सन का उपयोग करते हैं, तो आपको निम्न कर सकते हैं:
- एक आइवी परियोजना है कि ivy.jar शामिल है, और एक एक्सएमएल फ़ाइल है कि सब कुछ सेट अप आप के लिए बनाएँ। मेरे पास Github में से एक है जिसे आप देख सकते हैं। एक्सएमएल फ़ाइल को
ivy.tasks.xml
कहा जाता है।
- फिर अपनी परियोजना में, इस परियोजना को आयात करने के लिए
svn:externals
का उपयोग करें। अपने <project>
इकाई में
- आइवी नाम स्थान जोड़ें:
- अपने
build.xml
में, आप दो काम करने की जरूरत है।
- आईवी एक्सएमएल फ़ाइल आयात करने के लिए
<import>
कार्य का उपयोग करें जिसमें सब कुछ सेटअप है।
लाभ यह है कि अपने आइवी परियोजना को बदलने के लिए स्वचालित रूप से सभी परियोजनाओं कि आइवी के साथ बातचीत बदल जाएगा। उदाहरण के लिए, यदि आप आइवी सर्वर का यूआरएल बदलते हैं, या आपको आइवी कैश निर्देशिका को फिर से परिभाषित करने की आवश्यकता है।
एक आप, आप सरल एक ivy.xml
फ़ाइल है कि आपके निर्भरता को परिभाषित करता है बनाते हैं, और <ivy:cachepath>
और <ivy:retrieve>
का उपयोग तृतीय पक्ष जार आप की जरूरत को पुनः प्राप्त करने के लिए क्या। इसमें आपके क्लाइंट की ज़रूरत वाले सर्वर जार शामिल होंगे।