अपाचे एंट

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

सीमाएँ

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

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

यह भी देखें

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