أباتشي ميفن

نموذج كائن المشروع

يوفرPOM كل التكوين اللازم لمشروع منفرد. يتضمن التكوين العام اسم المشروع واسم المالك وتبعياته للمشاريع الأخرى. يمكن تكوين المراحل المنفردة من عملية البناء وتنفيذها كإضافات (بالإنجليزية: Plug-Ins). على سبيل المثال، يمكن أن يطوع المرء إضافة المترجم لاستخدام نسخة الجافا 1.5 في التصريف أو تحديد إمكانية القيام بحزم المشروع حتى لو فشلت بعض وحدات الاختبار.
يجب أن يتم تقسيم المشاريع الكبرى إلى وحدات متعددة أو مشاريع فرعية يحوي كل منها POM خاصا بها. ويمكن ساعتها كتابة جذر POM حيث من الممكن باستخدامه ترجمة آو تصريف جميع الوحدات باستخدام أمر واحد ويمكن أن ترث مجموعة POM التكوين من مجموعات POM أخرى. وترث جميع نماذج الكائن POMs من Super POM تلقائيا. يوفر Super POM تكوينا تلقائيا مثل أدلة المصدر التلقائية والإضافات التلقائية وهكذا.

الإضافات

تكمن معظم وظيفية ميڤن في الإضافات حيث تقدم الإضافة مجموعة من الأهداف التي يمكن تنفيذها باستخدام التركيب التالي:
mvn [plugin-name]:[goal-name]
مثلا؛ يمكن تصريف مشروع الجافا باستخدام إضافة المترجم التي تنتج هدفا للتصريف عن طريق تنفيذ الأمر التالي: mvn compiler:compile
توجد إضافات تختص بالبناء والاختبار وإدارة التحكم بالمصدر وإدارة خادم الويب وإنتاج مشروع إكليبس وغيرها الكثير. يتم تقديم وتكوين الإضافات في قسم <plugins>- من ملف pom.xml  وتضمّن بعض الإضافات في كل مشروع تلقائيا وتمتلك إعدادات تلقائية ملموسة.
وبرغم ذلك سيكون من المرهق أن يضطر المرء إلى تنفيذ أهداف عدة لبناء واختبار وحزم مشروع ما:
mvn compiler:compile
mvn surefire:test
mvn jar:jar
إلا أن مفهوم دورة حياة ميڤن يقوم بمعالجة هذا الأمر.

الاعتماديات

ألمح قسم المثال إلى الآلية التي يعالج فيها ميڤن مسألة الاعتمادية. فالمشروع الذي يحتاج مكتبة الإسبات (Hibernate) مثلا يمكنه بكل بساطة أن يعلن عن إحداثيات مشروع الإسبات في ملف POM. سيقوم ميڤن تلقائيا بتحميل الاعتماديات التي تحتاجها مكتبة الإسبات (وتدعى الاعتماديات المتنقلة) وتخزينها في مستودع المستخدم المحلي. يستخدم مستودع ميڤن 2 المركزي Maven 2 Central Repository  تلقائيا للبحث عن المكتبات ولكن يمكن للمستخدم تكوين المستودعات المستخدمة (مثال: مستودعات الشركة الخاصة) في POM.
توجد محركات بحث مثل Maven Central والتي يمكن استخدامها لإيجاد الأحداث الخاصة بمكتبات المصادر المفتوحة والأطر البرمجية.
يمكن أن تعتمد المشاريع التي تيم تطويرها على جهاز واحد على بعضها خلال المستودع المحلي. يعتبر المستودع المحلي تركيب مجلد بسيط يعمل كذاكرة مخبوءة لتنزيل الاعتماديات وكموقع تخزين مركزي للقطع التي يتم بناؤها محليا. يقوم الأمر mvn install  ببناء مشروع ووضع binaries الخاصة به في المستودع المحلي. ويمكن للمشاريع الأخرى أن تستفيد من هذا المشروع عن طريق تحديد إحداثياته في POM الخاصة بها.

مقارنة ميڤن مع أنت

يكمن الفرق الرئيسي بين ميڤن وأنت في أن تصميم ميڤن يتعامل مع كل المشاريع على أساس أن لها تركيبا معينا ومجموعة من تدفقات العمل المدعومة الخاصة بالمهام (مثال: الحصول على المصادر من تحكم المصدر وترجمة المشروع واختبار الوحدة إلخ). بينما تدعم معظم مشاريع البرمجيات المؤثرة هذه العمليات ولها بالفعل تركيب معرّف جيدا؛ فإن إحدى شروط ميڤن هي تعريف تركيبه وتطبيق عملياته في ملف POM. وبذا فإن ميڤن يعتمد على ميثاق يخص تعريف المشاريع وقاسمة تدفق العمل في المهام التي تدعمها جميع مشاريع ميڤن عموما.
يبدو هذا القيد على التصميم مماثلا للطريقة التي تتعامل فيها بيئات التطوير المتكاملة مع المشاريع وله فوائد جمة مثل تعريف المشروع بإيجاز وإمكانية التكامل الأوتوماتيكي لمشروع ميڤن مع أدوات التطوير الأخرى مثل IDEs وخوادم البناء وغيرها.
أما الجانب السلبي لهذه الطريقة فهي حاجتها إلى مستخدم يعنى أولا بفهم ماهية المشروع من وجهة نظر ميڤن والطريقة التي يعمل بها ميڤن مع المشاريع وذلك لأن ما يحدث عند تنفيذ مرحلة في ميڤن ليس بالأمر الذي يمكن ملاحظته فورا عند اختبار ملف مشروع ميڤن. ويعتبر هذا التركيب الضروري عائقا عند ترحيل مشروع مكتمل إلى ميڤن وذلك بسبب صعوبة أن يتم تبنيه من قبل طرق أخرى.
لا تتواجد المشاريع في أداة أنت فعليا من المنظور التقني للأداة. يعمل أنت مع سكريبتات بناء XML التي يتم تعريفها في ملف أو أكثر. يقوم بمعالجة الأهداف من هذه الملفات بحيث يقوم كل هدف بتنفيذ المهام. تقوم كل مهمة بتنفيذ عملية تقنية مثل تنفيذ الترجمة أو نسخ الملفات من هنا وهناك. يتم تنفيذ المهام بالأساس بالترتيب الذي يعطى من الاعتمادية على المهام الأخرى. وبذا يمكن القول بأن أنت هي أداة تعمل على سلسلة المهام سوية وتنفيذها بناء على الاعتمادية الداخلية والشروط المنطقية.
إن المزايا التي يقدمها أنت عديدة أيضا؛ فهو يعمل مع لغة XML محسنة بهدف الوصول إلى تعريف أوضح لعمل كل مهمة واعتمادية كل واحد منها. كما ويمكن العثور على كل المعلومات حول المهام التي سيتم تنفيذها بواسطة هدف أنت الذي يمكن إيجاده في سكريبت أنت. يمكن لمطور غير خبير بأنت أن يحدد عادة ماهية عمل سكريبت أنت بسيط عن طريق معاينة السكريبت فقط غير أن هذا الأمر لا ينطبق عادة في حالة ميڤن.
وعلى أي حال فلا يمكن لمطور متمرس يستخدم مشروع أنت حديثا أن يخمّن ما هو التركيب الأعلى في المستوى لسكريبت أنت وماهية عمله دون معاينة السكريبت بالتفصيل. اعتمادا على تعقيد السكريبت؛ يمكن أن يصبح هذا تحديا شاقا. بينما في حالة ميڤن؛ بإمكان مطور قد عمل سابقا على مشاريع ميڤن أخرى أن يعاين تركيب مشروع ميڤن لم يره قبلا وينفذ تدفق العمل القياسي الخاص بميڤن وهو على علم بالناتج المتوقع.
بالإمكان استخدام سكريبت أنت يتم تعريفه ليتصرف بطريق منتظمة مع كل المشاريع الموجودة في مجموعة عاملة أو في منظمة ما. عندما يزيد عدد وتعقيد المشاريع يصبح من السهل أن يضل الهدف طريقه عن النظام الذي قصد في البداية. ليست هذه بالمشكلة الكبيرة في حالة ميڤن وذلك لأن الأداة تفترض دائما طريقة معينة للقيام بالأشياء.
لاحظ أنه من الممكن أيضا تمديد وتكوين ميڤن بطريقة بعيدة عن الطريقة التي يتبعها ميڤن في تنفيذ المهام المنوطة به.

الخلفية التاريخية لميڤن

بدأت أداة ميڤن التي اخترعها جاسون فان زايل من أباتشي توربين في عام 2002. في عام 2003 تم التصويت على ميڤن وقبوله كمشروع على مستوى عالي ضمن مؤسسة برمجيات أباتشي. في يوليو من عام 2004؛ أطلق ميڤن كمعلم بالغ الأهمية تم الإعلان عن نسخة 1.0 من ميڤن 2 في أكتوبر 2005 بعد حوالي 6 أشهر من بقائها في دورات نسخة بيتا.

مستقبل أباتشي ميڤن

بدأت معلومات ميڤن 3.0 بالتقاطر في عام 2008. أطلقت نسخة بيتا الأولى من ميڤن 3.0 في أبريل عام 2010 بعد إطلاق نسخة ألفا 8. أعاد ميڤن 3.0 صياغة البنية التحتية لـ Project Builder الجوهري بحيث تم فصل تمثيل الملفات المعتمدة على POM عن تمثيل الكائنات في الذاكرة. زاد هذا الأمر من احتمالية أن تستفيد إضافات ميڤن 3.0 من ملفات التعريف الخاصة بالمشاريع التي لا تعتمد على الـ XML. تتضمن اللغات المقترحة لغة روبي (وهي موجودة في النمذجة الخاصة التي قدمها جاسون فان زيل) ولغة يامل وجروفي وقد أجرى دون براون من شركة أطلاسيان عملا تجريبيا لملفات تعريف لغة يامل التي تعتمد على POM (تتضمن سكريبت تحويل خارجيا لتنفيذها).
وقد أولي اهتمام خاص لتأكيد التوافق بين ميڤن 2 ميڤن 3 وبالنسبة لمعظم المشاريع فإن الترقية لميڤن 3 لا تستلزم أي تعديلات على بنية المشروع. شهدت نسخة البيتا الأولى من ميڤن 3 تقديم خصائص بنية متوازية والتي تعزز تكوين عدد من النوى على آلة متعددة النوى والتي يتم موائمتها خصيصا للمشاريع الكبرى متعددة الوحدات.