أباتشي أنت
المحتويات

بدايةً، أباتشي أنت هي أداة برمجية لتشغيل عمليات بناء البرمجيات ألياَ. وهو مشابه لـ صنع ولكن يتم تطبيقه باستخدام لغة جافا، ويتطلب برنامج جافا، وهو الأنسب لبناء مشاريع جافا. وفيما يلي تفاصيل أوسع عن ذلك.
وفي السياق ذاته، Ant هو مشروع تابع لـ اباتشي. وهو من برمجيات مفتوحة المصدر، وتم إصداره بموجب رخصة إيه إتش-64 أباتشي.
في هذا الإطار، والفرق الأكثر ملاحظة بين Ant وصنع هو استخدام Ant يستعمل لغة الرقم القابلة للامتداد لوصف عملية البناء وتابعيتها، بينما يستعمل صنع تنسيق Makefile. افتراضيا، يُسمى ملف لغة الرقم القابلة للامتداد build.xml.
التاريخ
إضافةً إلى ذلك، ولأن Ant جعل من العادي دمج اختبارات جيه يونت مع عملية البناء، جعل Ant من السهل على المطورين اقتباس اختبار التطوير المدفوع، وحتى البرمجة المدقعة.
وفي هذا الصدد، اليوم، أصبح Ant أداة بناءالأكثر استخداما من قبل مشاريع تنمية جافا. فمثلًا، أغلب مطوريّ المصدر المفتوح تشمل ملفات build.xml مع توزيعتها.
وعلى صعيد آخر، فكر جيمس دونكان ديفيدسون في Ant (اختصار "Another Neat Tool") عند تحويله لمنتج من صن مايكروسيستمز إلى مصدر مفتوح. وهذا المنتج، الذي تشير إليه صن بمحرك صفحات خادم جافا/سيرفلت، أصبح فيما بعد . وتم استخدام نسخة احتكارية من صنع لبنائه على سولاريس، ولكن في عالم المصدر مفتوح لم يكن هناك طريقة للتحكم في أي برنامج اُستخدِم لبناء Tomcat. تم إنشاء Ant كأداة برنامج مستقل بسيطة لبناء Tomcat من خلال توجيهات لغة الرقم القابلة للامتداد «ملف بناء». تم إصدر Ant (الإصدار 1.1) رسميا كمنتج مستقل في 19 يوليو 2000.
ومن ناحية أخرى، تم تقديم عدة مقترحات لإصدار Ant 2، مثل Ant Eater من قبل جيمس دنكان ديفيدسون، وMyrmidon من قبل بيتر دونالد، وMutant من قبل كونور ماكنيل، ولم يجد أي منهم القبول الواسع مع مجتمع المطورين.
وتشمل أدوات جافا للبناء Maven، وJavaMake.
rm -rf classes/
ومن جهة أخرى، آر إم هو أمر يونكس معين غير متوفر في بعض البيئات الأخرى. مايكروسوفت ويندوز، مثلًا، سيستعمل:
المحمولية
في هذا الإطار، ومثلًا، ففي نموذج ملف build.xml أعلاه يحذف هدف clean دليل classes وكل شيء بداخله. وفي Makefile عادة ما يتم ذلك مع الأمر:
في هذا الإطار، وأحد أهم الأهداف الرئيسية لـ Ant هي حل مشكلة قابلية حمل صنع. في Makefile الإجراءات المطلوبة لإنشاء هدف مُحددة كأوامر قشرة وهي محددة لـ منصة التي تشغل صنع. وتتطلب المنصات المختلفة أوامر قشرة مختلفة. وتحل Ant هذه المشكلة عن طريق توفير كمية كبيرة من الوظائف المضمنة التي من المفترض أن تتصرف بنفس الشكل في جميع المنصات.
الحدود
من جانب آخر، في makefiles، يمكن كتابة أي قاعدة لخلق نوع ملف من نوع ملف آخر داخل makefile. مثلًا، يمكنك تحويل مستند إلى تنسيق آخر باستخدام قواعد لتنفيذ أداة أخرى. وإنشاء مهمة مماثلة في Ant هو أكثر تعقيدا: يجب كتابة مهمة منفصلة في جافا وتضمينها مع ملف بناء Ant من أجل التعامل مع نفس النوع من الوظائف. ومع ذلك، هذا الفصل يمكنه ان يعزز من قراءة نص Ant عن طريق إخفاء بعض التفاصيل عن كيفية تنفيذ مهمة على منصات مختلفة.
كذلك، ان إعادة استخدام أجزاء من ملف البناء صعب. وقد جعل Ant 1.6 إعادة الاستخدام أسهل، مع خصائص مثل ، و، و، وع ذلك أحيانا ما قد يجادل البعض هذه الخصائص الجديدة حيث تنشئ منحنى تعليمي أحد بالنسبة لمستعملين Ant الجدد.
ومن ناحية أخرى، أغلب هذه الحدود لا تنطبق على إصدارات Ant الحديثة وهناك عدد لا يحصى من امتدادات طرف Ant الثالث (يسمى antlibs) والتي توفر الكثير من الوظائف المفقودة. كما يمكن لـ بيئة تطوير Eclipse المتكاملة بناء وتنفيذ نصوص Ant، في حين أن بيئة تطوير نت بينز المتكاملة تستعمل Ant لبناء نظامها الداخلي. وحيث أن كلا هاتين بيئات التطوير المتكاملة هي منصات تطوير شعبية، فإنهم يمكنم تبسيط استخدام Ant إلى حدّ كبير (وكمكافأة يمكن استخدام نصوص Ant التي تم إنشاؤها بواسطة نت بينز خارج بيئة التطوير المتكاملة تلك كنصوص مستقلة).
علاوةً على ذلك، والكثير من المهام القديمة—المهام الأساسية التي يتم استخدامها كل يوم، مثل ، و، و -- تستخدام قيم افتراضية للخيارات التي لا تتفق مع أحدث إصدارات المهام. وتغيير تلك الافتراضات سيكسر نصوص Ant الموجودة.
إضافةً إلى ذلك، عند توسيع خصائص في خيط أو عنصر نصي، لا يتم رفع خصائص غير معروفة كخطأ، ولكن تبقى كمرجع غير موسع (مثلًا {unassigned.property} $).
وفي هذا الصدد، ان تقييم الخصائص الكسولة غير معتمد. فمثلًا، عند العمل ضمن حلقة Antcontrib ، لا يمكن إعادة تقييم خاصية لقيمة فرعية قد تكون جزءا من التكرار. (مرة أخرى يمكنك حل هذ المشكلة اعتمادا على امتداد الطرف الثالث الذي تستعمله؛ مجاميع مهام تحكم التدفق توفر إعادة تعريف سريع للحلقات).
ومن جهة أخرى، ملفات بناء Ant مكتوبة بواسطة لغة الرقم القابلة للامتداد. وللمستعملين الغير مألوفين، يمكن لكلا من لغة الرقم القابلة للامتداد والتكوين المعقد (الهرمي، والمأمور جزئيا، والمرتبط بشكل مخترق) لوثائق Ant أن يكون عائقا أمام المتعلم. وقد كانت واجهة مستعمل رسومية يُطلق عليها Antidote متاحة لبعض الوقت، ولكن لم تكتسب شهرة، وقد تقاعدت من مشروع اباتشي. وعلاوة على ذلك، ان لغة Ant مطنبة للغاية، وملفات البناء للمشاريع الكبيرة أو المعقدة تصبح كبيرة بشكل صعب. ويمكن أن يحسن التصميم الجيد واعتدال ملفات البناء القدرة على قراءة الملفات ولكن ليس بالضرورة تخفيض الحجم. وهناك أدوات بنائية أخرى مثل Maven تستخدام نصوص أكثر إيجازا على حساب العمومية والمرونة.
من جانب آخر، عندما يتم تحديد خاصية عالمية لا يمكن تغييرها من قبل أي من المهام الأساسية. يوفر Antcontrib مهمة متغيرة لحل هذه المشكلة. ويوفر AntXtras نوع خاصية متغيرة والتي تكمل خصائص القراءة فقط.
علاوةً على ذلك، وقد حد Ant من قواعد التعامل مع الخطأ، ولا استمرار الحالة، لذلك لا يمكن أن تستعمل كأداة لسير العمل لأي سير عمل غير عمليات البناء والاختبار الكلاسيكية.
ومن ناحية أخرى، نموذج هدف Ant لا يتعامل مع الأدوات كأهداف. في أغلب أدوات البناء يكون الهدف هو الأداة التي أنشأها برنامج البناء – برنامج، ومكتبة، وملف كائن وسيط، ووثائق نسق المستندات المنقولة، وما إلى ذلك—وقواعد تحدد التبعيات بين الأهداف والمهام لتشغيل بناء الهدف عندما يكون قديم. ففي Ant يكون الهدف هو مجموعة من المهام بدلا من الأدوات. وهذا يعني أن Ant غير قادر في بعض الأحيان على تحديد العلاقة بين الأداة وتسلسل المهمة لبناء الأداة ويجب تنفيذ هذا المنطق باستخدام هياكل تحكم Ant.
<?xml version="1.0"?>
من جهة ثانية، وبداخل كل هدف يوجد الإجراءات التي يجب على Ant اتخاذها لبناء الهدف، ويتم هذا باستخدام tasks مدمجة. فمثلًا، لبناء هدف compile يجب أولأعلى Ant إنشاء مجلد يُسمى طبقات (لن يفعلAnt ذلك إلا إذا كان غير موجود بالفعل) ثم يستدعي مترجم جافا.ولذلك، فإن الـ tasks المستعملة هي mkdir وjavac. وهم يقومون بتنفيذ مهمة مشابهة لأدوات مساعدة سطر الأوامر الذي يحمل الاسم نفسه.
وهناك مهمة أخرى مستعملة في هذا المثال تُسمى jar :
من جانب آخر، تفوض الكثير من مهام Ant أعملهم إلى برامج خارجية، سواء أصلية أو جافا. يستعملون مهام و الخاصة ببرنامج Ant لإعداد أسطر الأوامر، والتعامل مع كل تفاصيل الرسم من معلومات ملف البناء إلى حجج البرنامج وتفسير قيمة العودة. يمكن للمستعملين رؤية المهام التي تفعل ذلك (مثلًا و، و، و)، عن طريق محاولة تنفيذ المهمة على نظام بدون البرنامج الأساسي على الطريق، أو بدون تثبيت عدة تطوير جافا.
وفي هذا السياق، مهمة Ant هذه لديها نفس اسم أداة المساعدة لسطر أوامر جافا العامة، JAR، ولكنها في الحقيقة دعوة لملف دعم برنامج Ant الذي بني في jar/zip المتضمن بداخله. هذه التفاصيل ليست واضحة لأغلب المستعملين النهائيين، الذين يحصولن فقط على jar، مع الملفات التي طلبوها.
rmdir /S /Q classes
من جانب آخر، والفرق المشترك بين المنصات هو الرمز المستعمل لتحديد عناصر مكونات ملف مسار النظام. يستعمل يونكس شرطة مائلة للامام (/) لتحديد المكونات في حين أن ويندوز يستعمل شرطة مائلة للخلف (\). ملفات بناء Ant تسمح للمؤلفين باختيار الاتفاقية المفضلة لديهم: شرطة مائلة للامام أو شرطة مائلة للخلف للدلائل؛ وفواصل منقوطة أو علامة ترقيم لفواصل المسار. وهو يحول كلا إلى الرمز المناسب للمنصة التي سيُنفذ عليها.
من جانب آخر، في ملف بناء Ant يمكن إنجاز الشيء نفسه باستخدام الأمر المدمج:
الامتدادات
إضافةً إلى ذلك، ويوجد امتدادات مهام أخرى موجودة لـ Perforce، ودوت نت، وإنتربرايز جافابين، ومعالجات الملفات، فقط لتسمية عدد قليل.
من جهة ثانية، يوفر Antcontrib مجموعة من المهام مثل العبارات الشرطية والعمليات على الخصائص فضلا عن مهام أخرى مفيدة.
في هذا الإطار، WOProject-Ant هو واحد من أمثلة كثيرة على امتداد task مكتوب لـ Ant. وضعت هذه الامتدادات لاستخدامها عن طريق نسخ ملفات jar إلى دليل lib التابع لـ Ant. وحالما يتم ذلك، يمكن استدعاء مهام الامتدادات مباشرة في ملف build.xml نموذجي. وامتدادات WOProject تسمح لمطوري WebObjects باستخدام ant في بناء إطارراتها وتطبيقاتها، بدلا من استخدام مجموعة آبل إكس كود.
نموذج من ملف build.xml
علاوةً على ذلك، وفيما يلي عينة من ملف build.xml لجافا بسيطة لتطبيق "Hello, world". وهي تحدد أربعة أهداف – clean، وclobber، وcompile، وjar، كل منها يحتوي على وصف مرتبطة به. ويسرد هدف jar هدف compile كتبعية. وهذا يُخبر Ant أنه قبل أن يتمكن من بدء هدف jar يجب أن يستكمل أولاَ هدف compile.
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟