أباتشي ميفن
المحتويات
- mvn package
- قراءات إضافية
- جي بيلدر
- الإضافات
- 3.8.1
- نموذج كائن المشروع
- test
- mvn jar:jar
- دمج بيئات التطوير المتكاملة
- Building Web Applications with Maven 2
- مقارنة ميڤن مع أنت
- deploy
- دورات حياة البناء
- Official Maven project website
- 4.0.0
- الخلفية التاريخية لميڤن
- الاعتماديات
- مستقبل أباتشي ميڤن
- mvn test
- mvn [plugin-name]:[goal-name]
- مثال
على سبيل التعريف، برنامج ميڤن (بالإنجليزية: Maven) هو أداة برمجية تستعمل في إدارة المشاريع وأتمتة البناء. برغم أن هذه اللغة استعملت في البداية في لغة البرمجة جافا ولكن يمكن استخدامها كذلك لبناء وإدارة المشاريع التي كتبت بلغة سي شارب وروبي وسكالا وغيرها من اللغات. يعمل برنامج ميڤن بطريقة مشابهة لأداة أباتشي أنت ولكنه يعتمد على مبادئ مختلفة ويعمل بوسيلة أكثر اختلافا في العمق. تستضيف مؤسسة برمجيات أباتشي أداة ميڤن وقد كانت هذه المؤسسة سابقا جزءا من مشروع جاكارتا. وفيما يلي تفاصيل أوسع عن ذلك.
وعلى صعيد آخر، يستعمل ميڤن بناء يعرف بنموذج كائن المشروع (بالإنجليزية: Project Object Model) أو ما يعرف اختصارا بـ POM لوصف مشروع البرمجية الذي سيتم بناؤه واعتماده على الوحدات الخارجية والمكونات وترتيب البناء. ويأتي ميڤن مع أهداف معرفة مسبقا لأداء مهام محددة معرفة جيدا مثل ترجمة الشيفرة ووضعها في حزمة واحدة.
ومن جهة أخرى، بني ميڤن باستخدام بناء يعتمد على استخدام الإضافة (Plug-In) ويسمح باستغلال أي تطبيق يمكن التحكم به من خلال مدخل قياسي. نظريا، يسمح هذا المبدأ لأي شخص بكتابة إضافة تتداخل مع أدوات البناء (المترجمات وأدوات اختبار الوحدة وغيرها) الخاصة بأي لغة أخرى. أما في الواقع؛ فإنه قد تم الحد من دعم واستخدام لغات البرمجة الأخرى ما عدا الجافا إلى أقل حد ممكن وتوجد في الوقت الحالي إضافة لإطار.NET يتم الحفاظ عليها وبينما تتوافر إضافة خاصة بلغة سي/سي++ أصلية تتم صيانتها من أجل استخدامها في ميڤن-نيتف و ميڤن-نار الخاصين بميڤن 2.
من جهة ثانية، يقوم ميڤن بشكل ديناميكي بتنزيل مكتبات الجافا وإضافات ميڤن من مستودع واحد أو أكثر. يوفر ميڤن دعما مدمجا لاستعادة الملفات من مستودع ميڤن 2 الرئيسي ومستودعات ميڤن الأخرى ويمكن أن يحمّل الأدوات إلى مستودعات محددة بعد القيام ببناء ناجح للبرنامج. تعمل الذاكرة الخبيئة التي تتكون من الأدوات التي تم تحميلها كوسيلة أولية لمزامنة ناتج المشاريع الموجودة على نظام محلي.
mvn package
علاوةً على ذلك، الذي سيقوم بترجمة ملفات الجافا وتنفيذ أي اختبارات وحزم الشيفرة النهائية والشيفرة والمصادر في ملف داخل target/my-app-1.0.jar (على فرض أن اسم الأداة هو my-app وتحمل النسخة رقم 1.0).
المبادئ
وفي هذا الصدد، باستخدام ميڤن نفسه؛ يوفر المستعمل تكوينا خاصا بالمشروع فقط بينما تقوم الإضافات المكوَّنة بالعمل الفعلي الخاص بترجمة المشروع وتنظيف الأدلة الهدف وتنفيذ اختبارات الوحدة وتوليد مستندات API وهلم جرا. وعادة لا يتوجب على المستعملين كتابة الإضافات بأنفسهم؛ وذلك على النقيض من Ant وmake التي يكتب فيها المرء إجراءات لازمة لتنفيذ المهام آنفة الذكر.
قراءات إضافية
وصلات خارجية
من جانب آخر، Available for free as PDF download or online reading: http://www.sonatype.com/documentation/books
جي بيلدر
كذلك، تتم مصادرة بعض خصائص بيئات التطوير المدمجة عندما لا تقوم بيئات التطوير بإجراء عمليات الترجمة بعد الآن. مثلًا يمكن لـ Eclipse's JDT أن يعيد ترجمة ملف جافا مصدري منفرد بعد أن يتم تحريره. تعمل الكثير من بيئات التطوير مع مجموعة مسطحة من المشاريع بدلا من التسلسل الهرمي للمجلدات التي يفضلها ميڤن. ويعقد هذا استخدام أنظمة SCM في بيئات التطوير باستخدام ميڤن.
إضافةً إلى ذلك، توفر هذه الإضافات القدرة على تحرير POM أو استخدام POM لتحديد مجموعة كاملة من اعتماديات المشروع مباشرة داخل بيئة التطوير.
الإضافات
من جهة ثانية، تكمن أغلب وظيفية ميڤن في الإضافات حيث تقدم الإضافة مجموعة من الأهداف التي يمكن تنفيذها باستخدام التركيب التالي:
3.8.1
من جهة ثانية، <!-- this dependency is only used for running and compiling tests -->
نموذج كائن المشروع
كذلك، يجب أن يتم تقسيم المشاريع الكبرى إلى وحدات متعددة أو مشاريع فرعية يحوي كل منها POM خاصا بها. ويمكن ساعتها كتابة جذر POM حيث من الممكن باستخدامه ترجمة آو تصريف جميع الوحدات باستخدام أمر واحد ويمكن أن ترث مجموعة POM التكوين من مجموعات POM أخرى. وترث جميع نماذج الكائن POMs من Super POM تلقائيا. يوفر Super POM تكوينا تلقائيا مثل أدلة المصدر التلقائية والإضافات التلقائية وهكذا.
وعلى صعيد آخر، يوفرPOM كل التكوين اللازم لمشروع منفرد. يتضمن التكوين العام اسم المشروع واسم المالك وتبعياته للمشاريع الأخرى. يمكن تكوين المراحل المنفردة من عملية البناء وتنفيذها كإضافات (بالإنجليزية: Plug-Ins). مثلًا، يمكن أن يطوع المرء إضافة المترجم لاستخدام نسخة الجافا 1.5 في التصريف أو تحديد إمكانية القيام بحزم المشروع حتى لو فشلت بعض وحدات الاختبار.
test
إضافةً إلى ذلك، يقوم POM بتعريف معرف وحيد للمشروع (الإحداثيات) وبتعريف اعتماده كذلك على إطار جيه يونت، وعلى أي حال يعتبر هذا كافيا لبناء مشروع وتنفيذ اختبار الوحدة المترافق مع المشروع. يحقق ميڤن هذا عن طريق احتضان فكرة الاتفاقية عند التكوين مما يعني أن أداة ميڤن توفر قيما افتراضية جيدة لتكوين المشروع. يشمل هيكل الأدلة (بالإنجليزية: directory) في مشروع ميڤن اصطلاحي عادي مدخلات الأدلة التالية:
ومن ثم تنفيذ الأمر:
mvn jar:jar
إلا أن مفهوم دورة حياة ميڤن يقوم بمعالجة هذا الأمر.
دمج بيئات التطوير المتكاملة
- إكليبس
- نتبينز
- إنتيليج إيديا
وفي السياق ذاته، تتواجد الإضافات التي تجرى على بيئات التطوير المتكاملة الشائعة العديدة لتوفير التكامل مع ميڤن باستخدام ألية بناء بيئات التطوير وأدوات تحرير المصدر بحيث تسمح لميڤن بترجمة المشاريع من داخل بيئة التطوير ولضبط متغير classpath الخاص بإتمام الشيفرة البرمجية وتظليل أخطاء المترجم وخلافه. من الأمثلة على بيئات التطوير المتكاملة الشائعة والتي تدعم التطوير باستخدام أداة ميڤن:
Building Web Applications with Maven 2
- The Maven 2 POM demystified - article at JavaWorld
- Verify the dependencies in your POM
- Maven history
مقارنة ميڤن مع أنت
وفي السياق ذاته، لاحظ أنه من الممكن كذلك تمديد وتكوين ميڤن بطريقة بعيدة عن الطريقة التي يتبعها ميڤن في تنفيذ المهام المنوطة به.
كذلك، وعلى أي حال فلا يمكن لمطور متمرس يستعمل مشروع أنت حديثا أن يخمّن ما هو التركيب الأعلى في المستوى لسكريبت أنت وماهية عمله دون معاينة السكريبت بالتفصيل. اعتمادا على تعقيد السكريبت؛ يمكن أن يصبح هذا تحديا شاقا. بينما في حالة ميڤن؛ بإمكان مطور قد عمل سابقا على مشاريع ميڤن أخرى أن يعاين تركيب مشروع ميڤن لم يره قبلا وينفذ تدفق العمل القياسي الخاص بميڤن وهو على علم بالناتج المتوقع.
من جانب آخر، لا تتواجد المشاريع في أداة أنت فعليا من المنظور التقني للأداة. يعمل أنت مع سكريبتات بناء XML التي يتم تعريفها في ملف أو أكثر. يقوم بمعالجة الأهداف من هذه الملفات بحيث يقوم كل هدف بتنفيذ المهام. تقوم كل مهمة بتنفيذ عملية تقنية مثل تنفيذ الترجمة أو نسخ الملفات من هنا وهناك. يتم تنفيذ المهام بالأساس بالترتيب الذي يعطى من الاعتمادية على المهام الأخرى. وبذا يمكن القول بأن أنت هي أداة تعمل على سلسلة المهام سوية وتنفيذها بناء على الاعتمادية الداخلية والشروط المنطقية.
وفي هذا الصدد، يبدو هذا القيد على التصميم مماثلا للطريقة التي تتعامل فيها بيئات التطوير المتكاملة مع المشاريع وله فوائد جمة مثل تعريف المشروع بإيجاز وإمكانية التكامل الأوتوماتيكي لمشروع ميڤن مع أدوات التطوير الأخرى مثل IDEs وخوادم البناء وغيرها.
وفي السياق ذاته، يكمن الفرق الرئيسي بين ميڤن وأنت في أن تصميم ميڤن يتعامل مع كل المشاريع على أساس أن لها تركيبا معينا ومجموعة من تدفقات العمل المدعومة الخاصة بالمهام (مثال: الحصول على المصادر من تحكم المصدر وترجمة المشروع واختبار الوحدة إلخ). بينما تدعم أغلب مشاريع البرمجيات المؤثرة هذه العمليات ولها بالفعل تركيب معرّف جيدا؛ فإن إحدى شروط ميڤن هي تعريف تركيبه وتطبيق عملياته في ملف POM. وبذا فإن ميڤن يعتمد على ميثاق يخص تعريف المشاريع وقاسمة تدفق العمل في المهام التي تدعمها جميع مشاريع ميڤن عموما.
كذلك، إن المزايا التي يقدمها أنت عديدة كذلك؛ فهو يعمل مع لغة XML محسنة بهدف الوصول إلى تعريف أوضح لعمل كل مهمة واعتمادية كل واحد منها. كما ويمكن العثور على كل المعلومات حول المهام التي سيتم تنفيذها بواسطة هدف أنت الذي يمكن إيجاده في سكريبت أنت. يمكن لمطور غير خبير بأنت أن يحدد عادة ماهية عمل سكريبت أنت بسيط عن طريق معاينة السكريبت فقط غير أن هذا الأمر لا ينطبق عادة في حالة ميڤن.
من جهة ثانية، أما الجانب السلبي لهذه الطريقة فهي حاجتها إلى مستعمل يعنى أولا بفهم ماهية المشروع من وجهة نظر ميڤن والطريقة التي يعمل بها ميڤن مع المشاريع وذلك لأن ما يحدث عند تنفيذ مرحلة في ميڤن ليس بالأمر الذي يمكن ملاحظته فورا عند اختبار ملف مشروع ميڤن. ويعتبر هذا التركيب الضروري عائقا عند ترحيل مشروع مكتمل إلى ميڤن وذلك بسبب صعوبة أن يتم تبنيه من قبل طرق أخرى.
كذلك، بالإمكان استخدام سكريبت أنت يتم تعريفه ليتصرف بطريق منتظمة مع كل المشاريع الموجودة في مجموعة عاملة أو في منظمة ما. عندما يزيد عدد وتعقيد المشاريع يصبح من السهل أن يضل الهدف طريقه عن النظام الذي قصد في البداية. ليست هذه بالمشكلة الكبيرة في حالة ميڤن وذلك لأن الأداة تفترض دائما طريقة معينة للقيام بالأشياء.
deploy
كذلك، يمكن ربط الأهداف التي تقدمها الإضافات بمراحل مختلفة من دورات الحياة. مثلًا؛ يتم قرن الهدف "compiler:compile" مع مرحلة compile بينما يتم ربط الهدف surefire:test مع مرحلة الاختبار phase. عند تنفيذ الأمر التالي:
دورات حياة البناء
- process-resources
- compile
- process-test-resources
- test-compile
- test
- package
- install
إضافةً إلى ذلك، دورة حياة البناء هي قائمة من المراحل ذات الأسماء التي يمكن استخدامها لترتيب تنفيذ الهدف. إحدى دورات الحياة القياسية المعروفة في حالة ميڤن هي دورة الحياة التلقائية (default lifecycle) والتي تتضمن المراحل التالية بنفس الترتيب:
Official Maven project website
من جهة ثانية، The Complete Reference, a printed and free online reading book.
علاوةً على ذلك، The Maven 2 tutorial: A practical guide for Maven 2 users - tutorial at Codehaus.org
4.0.0
- <!-- project coordinates, i.e. a group of values which
- uniquely identify this project -->
- com.mycompany.app
- my-app
- 1.0
- <!-- library dependencies -->
- <!-- coordinates of the required library -->
- junit
- junit
الخلفية التاريخية لميڤن
من جانب آخر، بدأت أداة ميڤن التي اخترعها جاسون فان زايل من أباتشي توربين في سنة 2002. في سنة 2003 تم التصويت على ميڤن وقبوله كمشروع على مستوى عالي ضمن مؤسسة برمجيات أباتشي. في يوليو من عام 2004؛ أطلق ميڤن كمعلم بالغ الأهمية تم الإعلان عن نسخة 1.0 من ميڤن 2 في أكتوبر 2005 بعد نحو 6 أشهر من بقائها في دورات نسخة بيتا.
الاعتماديات
مقارنة ميڤن أباتشي مع الأدوات المشابهة له
إضافةً إلى ذلك، ألمح قسم المثال إلى الآلية التي يعالج فيها ميڤن مسألة الاعتمادية. فالمشروع الذي يحتاج مكتبة الإسبات (Hibernate) مثلا يمكنه بكل بساطة أن يعلن عن إحداثيات مشروع الإسبات في ملف POM. سيقوم ميڤن تلقائيا بتحميل الاعتماديات التي تحتاجها مكتبة الإسبات (وتدعى الاعتماديات المتنقلة) وتخزينها في مستودع المستعمل المحلي. يستعمل مستودع ميڤن 2 المركزي Maven 2 Central Repository تلقائيا للبحث عن المكتبات ولكن يمكن للمستعمل تكوين المستودعات المستعملة (مثال: مستودعات الشركة الخاصة) في POM.
من جهة ثانية، توجد محركات بحث مثل Maven Central والتي يمكن استخدامها لإيجاد الأحداث الخاصة بمكتبات المصادر المفتوحة والأطر البرمجية.
من جانب آخر، يمكن أن تعتمد المشاريع التي تيم تطويرها على جهاز واحد على بعضها خلال المستودع المحلي. يعتبر المستودع المحلي تركيب مجلد بسيط يعمل كذاكرة مخبوءة لتنزيل الاعتماديات وكموقع تخزين مركزي للقطع التي يتم بناؤها محليا. يقوم الأمر mvn install ببناء مشروع ووضع binaries الخاصة به في المستودع المحلي. ويمكن للمشاريع الأخرى أن تستفيد من هذا المشروع عن طريق تحديد إحداثياته في POM الخاصة بها.
مستقبل أباتشي ميڤن
في هذا الإطار، وقد أولي اهتمام خاص لتأكيد التوافق بين ميڤن 2 ميڤن 3 وبالنسبة لأغلب المشاريع فإن الترقية لميڤن 3 لا تستلزم أي تعديلات على بنية المشروع. شهدت نسخة البيتا الأولى من ميڤن 3 تقديم خصائص بنية متوازية والتي تعزز تكوين عدد من النوى على آلة متعددة النوى والتي يتم موائمتها خصيصا للمشاريع الكبرى متعددة الوحدات.
ومن ناحية أخرى، بدأت معلومات ميڤن 3.0 بالتقاطر في سنة 2008. أطلقت نسخة بيتا الأولى من ميڤن 3.0 في أبريل عام 2010 بعد إطلاق نسخة ألفا 8. أعاد ميڤن 3.0 صياغة البنية التحتية لـ Project Builder الجوهري بحيث تم فصل تمثيل الملفات المعتمدة على POM عن تمثيل الكائنات في الذاكرة. زاد هذا الأمر من احتمالية أن تستفيد إضافات ميڤن 3.0 من ملفات التعريف الخاصة بالمشاريع التي لا تعتمد على الـ XML. تتضمن اللغات المقترحة لغة روبي (وهي موجودة في النمذجة الخاصة التي قدمها جاسون فان زيل) ولغة يامل وجروفي وقد أجرى دون براون من شركة أطلاسيان عملا تجريبيا لملفات تعريف لغة يامل التي تعتمد على POM (تتضمن سكريبت تحويل خارجيا لتنفيذها).
- انظر كذلك
- أباتشي أنت
- هدسون
- مراجع
mvn test
كذلك، بفضل دورات الحياة التلقائية؛ يمكن بناء واختبار وتثبيت كل مشروع ميڤن باستخدام الأمرmvn install.
في هذا الإطار، يحوي ميڤن كذلك دورات حياة قياسية لتنظيف المشروع وإنتاج موقع المشروع. لو كان التنظيف جزءا من دورة الحياة الافتراضية لتم تنظيف المشروع في كل مرة يتم بناؤه فيها وهو أمر غير مرغوب به ولذا منح التنظيف دورة حياة خاصة به.
ومن ناحية أخرى، سيقوم ميڤن بتنفيذ جميع الأهداف المقترنة بكل المراحل وصولا إلى مرحلة الاختبار. وهكذا سيتم تنفيذ هدف «resources:resources المقترن بمرحلة process-resources ومن ثم compiler:compile», إلى أن ينفذ هدف surefire:test في النهاية.
mvn [plugin-name]:[goal-name]
mvn compiler:compile
علاوةً على ذلك، توجد إضافات تختص بالبناء والاختبار وإدارة التحكم بالمصدر وإدارة خادم الويب وإنتاج مشروع إكليبس وغيرها الكثير. يتم تقديم وتكوين الإضافات في قسم - من ملف pom.xml وتضمّن بعض الإضافات في كل مشروع تلقائيا وتمتلك إعدادات تلقائية ملموسة.
إضافةً إلى ذلك، وبرغم ذلك سيكون من المرهق أن يضطر المرء إلى تنفيذ أهداف عدة لبناء واختبار وحزم مشروع ما:
وفي هذا الصدد، مثلا؛ يمكن تصريف مشروع الجافا باستخدام إضافة المترجم التي تنتج هدفا للتصريف عن طريق تنفيذ الأمر التالي: mvn compiler:compile
mvn surefire:test
مثال
<!-- model version is always 4.0.0 for Maven 2.x POMs -->
من جانب آخر، يتم تكوين مشاريع ميڤن باستخدام نموذج مشروع الكائن الذي يتم تخزينه في ملف pom.xml وفيما يلي مثال مصغر على هذا الملف:
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟