अपाचे एंट

अपाचे एंट सॉफ्टवेयर निर्माण प्रक्रियाओं को स्वचालित करने के लिए एक सॉफ्टवेयर उपकरण है जो यूनिक्स के मेक बिल्ड टूल के प्रतिस्थापन के रूप में 2000 की शुरुआत में अपाचे टॉमकैट परियोजना से उत्पन्न हुआ था। यह मेक के समान है, लेकिन इसे जावा भाषा का उपयोग करके प्रयुक्त किया जाता है और इसके लिए जावा प्लेटफ़ॉर्म की आवश्यकता होती है। मेक के विपरीत, जो मेकफ़ाइल प्रारूप का उपयोग करता है, एंट कोड निर्माण प्रक्रिया और उसकी निर्भरता का वर्णन करने के लिए XML का उपयोग करता है।

अपाचे सॉफ्टवेयर फाउंडेशन द्वारा अपाचे लाइसेंस के तहत जारी किया गया, एंट एक ओपन-सोर्स प्रोजेक्ट है।

इतिहास
एंट ("एक और नीट टूल") की कल्पना जेम्स डंकन डेविडसन ने सन माइक्रोसिस्टम्स के संदर्भ जेएसपी और सर्वलेट इंजन, बाद में अपाचे टॉमकैट को ओपन-सोर्स के रूप में रिलीज के लिए तैयार करते समय की थी। इसे सोलारिस प्लेटफॉर्म पर बनाने के लिए मेक के एक मालिकाना संस्करण का उपयोग किया गया था, लेकिन ओपन-सोर्स दुनिया में, यह नियंत्रित करने का कोई तरीका नहीं था कि टॉमकैट को बनाने के लिए किस प्लेटफॉर्म का उपयोग किया गया था; इसलिए एंट को XML "बिल्ड फ़ाइल" में निर्देशों से टॉमकैट बनाने के लिए एक सरल प्लेटफ़ॉर्म-स्वतंत्र टूल के रूप में बनाया गया था। एंट (संस्करण 1.1) को आधिकारिक तौर पर 19 जुलाई, 2000 को एक स्टैंडअलोन उत्पाद के रूप में जारी किया गया था।

एंट संस्करण 2 के लिए कई प्रस्ताव दिए गए हैं, जैसे जेम्स डंकन डेविडसन द्वारा एंटईटर, पीटर डोनाल्ड द्वारा मायर्मिडॉन और कॉनर मैकनील द्वारा म्यूटेंट, जिनमें से किसी को भी डेवलपर समुदाय के साथ बड़ी स्वीकृति नहीं मिल पाई थी।

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

2004 में अपाचे ने इसी उद्देश्य से मावेन नामक एक नया टूल बनाया।

ग्रैडल, जो इसी तरह का सॉफ्टवेयर है, 2008 में बनाया गया था, इसके विपरीत XML के स्थान पर ग्रूवी (और कुछ अन्य भाषाओं) कोड का उपयोग करता है।

एक्सटेंशन
डब्ल्यूओप्रोजेक्ट-एंट, एंट के लिए लिखे गए कार्य एक्सटेंशन के कई उदाहरणों में से एक है। ये एक्सटेंशन उनकी फ़ाइलों को एंट की   निर्देशिका में कॉपी करके इंस्टॉल किए जाते हैं। एक बार यह हो जाने के बाद, इन कार्य एक्सटेंशनों को सीधे विशिष्ट   फ़ाइल में प्रयुक्त किया जा सकता है। डब्ल्यूओप्रोजेक्ट एक्सटेंशन एप्पल के एक्सकोड सुइट का उपयोग करने के बजाय, वेबऑब्जेक्ट्स डेवलपर्स को अपने फ्रेमवर्क और ऐप्स के निर्माण में एंट का उपयोग करने की अनुमति देते हैं।

सशर्त विवरण और संपत्तियों पर संचालन के साथ-साथ अन्य उपयोगी कार्यों जैसे कार्यों का एक संग्रह प्रदान करता है।

नेटवर्किंग, स्विंग (जावा) यूजर इंटरफेस, JSON प्रोसेसिंग और अन्य के लिए कार्यों और प्रकारों को प्रयुक्त करता है।

विवशतापूर्वक, .NET फ्रेमवर्क, ईजेबी और फ़ाइल सिस्टम परिवर्तन के लिए अन्य कार्य एक्सटेंशन उपस्थित हैं।

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

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

इस उदाहरण में प्रयुक्त एक अन्य कार्य को नाम दिया गया है:

इस एंट कार्य का नाम सामान्य जावा कमांड-लाइन उपयोगिता, जार जैसा ही है, लेकिन वास्तव में यह एंट प्रोग्राम के अंतर्निहित जार/ज़िप फ़ाइल समर्थन के लिए एक कॉल है। यह विवरण अधिकांश अंतिम उपयोगकर्ताओं के लिए प्रासंगिक नहीं है, जिन्हें उनके द्वारा मांगी गई फ़ाइलों के साथ केवल वही जार मिलता है जो वे चाहते थे।

कई एंट कार्य अपना काम बाहरी प्रोग्रामों, या तो देशी या जावा, को सौंप देते हैं। वे कमांड लाइन स्थापित करने के लिए एंट के अपने और  कार्यों का उपयोग करते हैं, और बिल्ड फ़ाइल में जानकारी से लेकर प्रोग्राम के तर्कों और रिटर्न वैल्यू की व्याख्या करने तक मैपिंग के सभी विवरणों को संभालते।उपयोगकर्ता देख सकते हैं कि कौन से कार्य ऐसा करते हैं (उदाहरण के लिए, , , , पथ पर अंतर्निहित प्रोग्राम के बिना, या पूर्ण जावा डेवलपमेंट किट (जेडीके) स्थापित किए बिना सिस्टम पर कार्य निष्पादित करने का प्रयास करके करते हैं।

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

सीमाएँ

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

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

यह भी देखें

 * स्वचालन बनाएँ
 * बिल्ड ऑटोमेशन सॉफ़्टवेयर की सूची
 * अपाचे जेली, XML को निष्पादन योग्य कोड में बदलने के लिए एक उपकरण
 * अपाचे आइवी, एक निर्भरता प्रबंधक जो एंट के उपप्रोजेक्ट एंट के साथ मजबूती से एकीकृत होता है
 * अपाचे मावेन, मुख्य रूप से जावा के लिए एक परियोजना प्रबंधन और निर्माण स्वचालन उपकरण
 * नैंट, एंट जैसा उपकरण जो जावा के बजाय .NET फ्रेमवर्क वातावरण पर लक्षित है
 * ग्रैडल, ग्रूवी के साथ निर्मित एक जेवीएम बिल्ड टूल