अपाचे एंट

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

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

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

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

2004 में Apache ने इसी उद्देश्य से Apache Maven नामक एक नया टूल बनाया।

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

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

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

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

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

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

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

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

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

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

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

सीमाएँ

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

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

यह भी देखें

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