أباتشي مافن
مافن أداة لأتمتة عمليات البناء، تُستخدم بشكل أساسي لمشاريع جافا . كما يمكن استخدامها لبناء وإدارة المشاريع المكتوبة بلغات أخرى مثل سي شارب ، وروبي ، وسكالا ، وغيرها. تستضيف مؤسسة أباتشي للبرمجيات مشروع مافن ، الذي كان سابقًا جزءًا من مشروع جاكرتا .
يُعالج Maven جانبين أساسيين في بناء البرمجيات: كيفية بناء البرمجيات والتبعيات الخاصة بها. على عكس الأدوات السابقة مثل Apache Ant ، يستخدم Maven اصطلاحات مُحددة لإجراءات البناء، ولا يتطلب الأمر سوى تحديد الاستثناءات. يصف ملف XML مشروع البرمجيات قيد الإنشاء، وتبعياته على الوحدات والمكونات الخارجية الأخرى، وترتيب البناء، والمجلدات، والمكونات الإضافية المطلوبة . يأتي Maven مزودًا بأهداف مُحددة مسبقًا لتنفيذ مهام مُحددة بدقة، مثل تجميع الشفرة وتغليفها. يقوم Maven بتنزيل مكتبات Java ومكونات Maven الإضافية ديناميكيًا من مستودع واحد أو أكثر، مثل مستودع Maven 2 المركزي، ويخزنها في ذاكرة تخزين مؤقتة محلية. [ 2 ] يمكن أيضًا تحديث هذه الذاكرة المؤقتة المحلية للملفات التي تم تنزيلها بملفات تم إنشاؤها بواسطة مشاريع محلية. كما يمكن تحديث المستودعات العامة أيضًا.
تم تصميم Maven باستخدام بنية تعتمد على الإضافات، مما يسمح له بالاستفادة من أي تطبيق يمكن التحكم فيه عبر المدخلات القياسية. يتم توفير إضافة أصلية بلغة C / C++ لـ Maven 2. [ 3 ]
لا تعتمد التقنيات البديلة مثل Gradle و sbt كأدوات بناء على XML ، ولكنها تحافظ على المفاهيم الأساسية التي قدمها Maven. ومع Apache Ivy ، تم تطوير مدير تبعيات مخصص يدعم أيضًا مستودعات Maven. [ 4 ]
يدعم Apache Maven عمليات البناء القابلة للتكرار . [ 5 ] [ 6 ]
تاريخ

تم إنشاء مافن بواسطة جيسون فان زيل في عام 2002، وبدأ كمشروع فرعي من أباتشي توربين . وفي عام 2003، تم قبول مافن كمشروع رئيسي لمؤسسة برمجيات أباتشي .
سجل الإصدارات:
- الإصدار 1 - يوليو 2004 - أول إصدار هام (الآن في نهاية عمره الافتراضي).
- الإصدار 2 - أكتوبر 2005 - بعد حوالي ستة أشهر في دورات بيتا (الآن في نهاية العمر الافتراضي).
- الإصدار 3 - أكتوبر 2010 - لا يزال متوافقًا إلى حد كبير مع مشاريع Maven 2. شملت التغييرات إعادة تصميم أداة بناء المشاريع الأساسية ودعم عمليات البناء المتوازية. فصلت إعادة تصميم الأداة الأساسية بين تمثيل الملفات والتمثيل الموجود في الذاكرة، وسمحت للإضافات بالاستفادة من ملفات تعريف المشاريع غير القائمة على XML. تشمل اللغات المقترحة Ruby (متوفرة بالفعل في نموذج أولي خاص من قِبل Jason van Zyl)، و YAML ، و Groovy . تستفيد ميزة البناء المتوازي من عدد قابل للتكوين من النوى على جهاز متعدد النوى، وهي مناسبة بشكل خاص للمشاريع الكبيرة متعددة الوحدات.
- الإصدار 4 - حاليًا في مرحلة المرشح للإصدار (تم إصدار RC4 في يونيو 2025). [ 7 ]
بناء الجملة
يتم تكوين مشاريع Maven باستخدام نموذج كائن المشروع (POM) في pom.xmlملف.
ملف مثال:
<project> <!-- إصدار النموذج دائمًا 4.0.0 لملفات Maven 2.x POMs --> <modelVersion> 4.0.0 </modelVersion> <!-- إحداثيات المشروع، أي مجموعة من القيم التي تُعرّف هذا المشروع بشكل فريد --> <groupId> com.mycompany.app </groupId> <artifactId> my-app </artifactId> <version> 1.0 </version><!-- تبعيات المكتبة --> <التبعيات><!-- إحداثيات مكتبة مطلوبة. النطاق هو 'test' للإشارة إلى أن المكتبة تُستخدم فقط لتشغيل الاختبارات. --> <dependency> <groupId> org.junit.jupiter </groupId> <artifactId> junit-jupiter-engine </artifactId> <version> 5.9.1 </version> <scope> test </scope> </dependency></dependencies> </project>يُحدد ملف POM هذا مُعرّفًا فريدًا للمشروع ( الإحداثيات ) واعتمادية واحدة على مكتبة JUnit . مع ذلك، هذا كافٍ لبناء المشروع وتشغيل اختبارات الوحدة المرتبطة به. يُحقق Maven ذلك من خلال تبني مبدأ " الاتفاقية بدلًا من التكوين" ، أي أن Maven يُوفر قيمًا افتراضية لتكوين المشروع.
يحتوي هيكل الدليل لمشروع Maven اصطلاحي عادي على إدخالات الدليل التالية:

| اسم الدليل | غاية |
|---|---|
| مشروع المنزل | يحتوي على pom.xmlجميع المجلدات الفرعية. |
src/main/java | يحتوي على شفرة المصدر بلغة جافا القابلة للتسليم للمشروع. |
src/main/resources | يحتوي على الموارد القابلة للتسليم للمشروع، مثل ملفات الخصائص. |
src/test/java | يحتوي على شفرة المصدر الخاصة باختبار جافا (حالات اختبار JUnit أو TestNG، على سبيل المثال) للمشروع. |
src/test/resources | يحتوي على الموارد اللازمة للاختبار. |
سيقوم الأمر mvn packageبتجميع جميع ملفات Java، وتشغيل أي اختبارات، وتجميع التعليمات البرمجية والموارد القابلة للتسليم في target/my-app-1.0.jar(بافتراض أن artifactId هو my-app وأن الإصدار هو 1.0).
باستخدام Maven، يُقدّم المستخدم فقط إعدادات المشروع، بينما تتولى الإضافات القابلة للتكوين المهام الفعلية لتجميع المشروع، وتنظيف مجلدات الوجهة، وتشغيل اختبارات الوحدة، وإنشاء وثائق واجهة برمجة التطبيقات، وما إلى ذلك. عمومًا، لا ينبغي للمستخدمين كتابة الإضافات بأنفسهم. على النقيض من ذلك، في Ant و make ، يُكتب إجراء تنفيذي لتنفيذ المهام المذكورة.
تصميم
نموذج كائن المشروع
يُوفّر نموذج كائن المشروع (POM) [ 8 ] جميع إعدادات مشروع واحد. تشمل الإعدادات العامة اسم المشروع، ومالكه، واعتماداته على مشاريع أخرى. كما يُمكن ضبط مراحل مُحددة من عملية البناء، والتي تُنفّذ كإضافات . على سبيل المثال، يُمكن ضبط إضافة المُصرّف لاستخدام Java الإصدار 1.5 للتجميع، أو تحديد تغليف المشروع حتى في حال فشل بعض اختبارات الوحدة.
ينبغي تقسيم المشاريع الكبيرة إلى عدة وحدات، أو مشاريع فرعية، لكل منها ملف POM خاص بها. يمكن بعد ذلك كتابة ملف POM رئيسي يُمكن من خلاله تجميع جميع الوحدات بأمر واحد. كما يمكن لملفات POM أن ترث الإعدادات من ملفات POM أخرى. ترث جميع ملفات POM الإعدادات من ملف POM الرئيسي [ 9 ] افتراضيًا. يوفر ملف POM الرئيسي الإعدادات الافتراضية، مثل أدلة المصادر الافتراضية، والمكونات الإضافية الافتراضية، وما إلى ذلك.
الإضافات
تعتمد معظم وظائف Maven على الإضافات . توفر الإضافة مجموعة من الأهداف التي يمكن تنفيذها باستخدام الأمر mvn [plugin-name]:[goal-name]. على سبيل المثال، يمكن تجميع مشروع Java باستخدام هدف compile-goal الخاص بإضافة compiler-plugin [ 10 ] عن طريق تشغيل الأمر mvn compiler:compile.
تتوفر إضافات Maven للبناء والاختبار وإدارة التحكم في المصادر وتشغيل خادم الويب وإنشاء ملفات مشاريع Eclipse ، وغير ذلك الكثير. [ 11 ] تُضاف الإضافات وتُهيأ في قسم <plugins> من pom.xmlملف. تتضمن كل المشاريع افتراضيًا بعض الإضافات الأساسية، والتي تأتي بإعدادات افتراضية مناسبة.
ومع ذلك، سيكون الأمر مرهقاً إذا تطلبت عملية بناء مشروع برمجي واختباره وتغليفه النموذجية تشغيل كل هدف على حدة يدوياً:
mvn compiler:compilemvn surefire:testmvn jar:jar
مفهوم دورة حياة Maven يعالج هذه المشكلة.
تُعدّ الإضافات الطريقة الأساسية لتوسيع نطاق Maven. ويمكن تطوير إضافة Maven عن طريق توسيع فئة org.apache.maven.plugin.AbstractMojo. يُقدّم مقال " أتمتة تطوير وإدارة الأجهزة الافتراضية السحابية" مثالًا برمجيًا وشرحًا لإضافة Maven لإنشاء جهاز افتراضي قائم على الحوسبة السحابية لتشغيل خادم تطبيقات . [ 12 ]
بناء دورات الحياة
دورة حياة البناء هي قائمة من المراحل المسماة التي يمكن استخدامها لترتيب تنفيذ الأهداف. إحدى دورات الحياة القياسية الثلاث في Maven هي دورة الحياة الافتراضية ، والتي تتضمن المراحل التالية، التي تُنفذ بالترتيب المذكور: [ 13 ]
- التحقق من الصحة
- توليد المصادر
- مصادر العملية
- إنشاء الموارد
- موارد العملية
- تجميع
- مصادر اختبار المعالجة
- موارد اختبار المعالجة
- اختبار التجميع
- امتحان
- طَرد
- ثَبَّتَ
- نشر
compiler:compileيمكن ربط الأهداف التي توفرها الإضافات بمراحل مختلفة من دورة حياة المشروع. على سبيل المثال، يرتبط الهدف `<sub>1</sub>` افتراضيًا بالمرحلة `<sub>2</sub>`، بينما يرتبط compileالهدف `<sub>3</sub>` بالمرحلة `<sub>4</sub>`. عند تنفيذ الأمر، يُشغّل Maven جميع الأهداف المرتبطة بكل مرحلة من المراحل حتى المرحلة `<sub>4</sub>`. في هذه الحالة، يُشغّل Maven الهدف المرتبط بالمرحلة `<sub>4</sub>` ، ثم الهدف `<sub>3</sub>`، وهكذا حتى يُشغّل الهدف `<sub>3</sub>` أخيرًا.surefire:testtestmvn testtestresources:resourcesprocess-resourcescompiler:compilesurefire:test
يحتوي Maven أيضًا على مراحل قياسية لتنظيف المشروع وإنشاء موقع المشروع. لو كان التنظيف جزءًا من دورة الحياة الافتراضية، لكان المشروع يُنظف في كل مرة يُبنى فيها. وهذا أمر غير مرغوب فيه، لذا خُصصت دورة حياة مستقلة للتنظيف.
تُمكّن دورات الحياة القياسية المستخدمين الجدد في أي مشروع من بناء واختبار وتثبيت جميع مشاريع Maven بدقة باستخدام أمر واحد mvn install. افتراضيًا، يُغلّف Maven ملف POM في ملفات JAR وWAR مُولّدة. تستطيع أدوات مثل diet4j [ 14 ] استخدام هذه المعلومات لحلّ وحدات Maven وتشغيلها بشكل متكرر أثناء وقت التشغيل دون الحاجة إلى ملف JAR ضخم يحتوي على جميع أكواد المشروع.
التبعيات
تُعدّ إدارة التبعيات ميزة أساسية في Maven . تعتمد آلية معالجة التبعيات في Maven على نظام إحداثيات يُحدد العناصر الفردية، مثل مكتبات البرامج أو الوحدات النمطية. يشير مثال ملف POM أعلاه إلى إحداثيات JUnit كاعتمادية مباشرة للمشروع. يحتاج أي مشروع يحتاج، على سبيل المثال، إلى مكتبة Hibernate، ببساطة إلى تعريف إحداثيات مشروع Hibernate في ملف POM الخاص به. سيقوم Maven تلقائيًا بتنزيل الاعتمادية والتبعيات التي تحتاجها Hibernate نفسها (وتُسمى التبعيات المتعدية ) وتخزينها في مستودع المستخدم المحلي. يُستخدم مستودع Maven المركزي [ 15 ] افتراضيًا للبحث عن المكتبات، ولكن يُمكن تهيئة المستودعات المراد استخدامها (مثل المستودعات الخاصة بالشركة) ضمن ملف POM.
يكمن الاختلاف الجوهري بين Maven و Ant في أن تصميم Maven يعتبر جميع المشاريع ذات بنية محددة ومجموعة من مسارات العمل المدعومة (مثل الحصول على الموارد من نظام التحكم في الإصدار، وتجميع المشروع، واختبار الوحدات، وما إلى ذلك). في حين أن معظم مشاريع البرمجيات تدعم هذه العمليات فعليًا ولديها بنية محددة جيدًا، فإن Maven يشترط تعريف هذه البنية وتفاصيل تنفيذ العمليات في ملف POM. وبالتالي، يعتمد Maven على اتفاقية لتعريف المشاريع وعلى قائمة مسارات العمل المدعومة عمومًا في جميع المشاريع. [ 16 ]
يحتوي المستودع المركزي على محرك بحث، [ 15 ] والذي يمكن استخدامه للعثور على إحداثيات المكتبات والأطر مفتوحة المصدر المختلفة.
يمكن للمشاريع المطورة على جهاز واحد أن تعتمد على بعضها البعض من خلال المستودع المحلي. المستودع المحلي عبارة عن بنية مجلدات بسيطة تعمل كذاكرة تخزين مؤقتة للتبعيات التي تم تنزيلها، ومكان تخزين مركزي للمخرجات التي تم إنشاؤها محليًا. يقوم أمر Maven mvn installبإنشاء مشروع ووضع ملفاته التنفيذية في المستودع المحلي. بعد ذلك، يمكن للمشاريع الأخرى استخدام هذا المشروع عن طريق تحديد موقعه في ملفات POM الخاصة بها.
قابلية التشغيل البيني
توجد إضافات للعديد من بيئات التطوير المتكاملة (IDE) الشائعة التي تستهدف لغة برمجة Java لتوفير تكامل Maven مع آلية بناء IDE وأدوات تحرير المصدر، مما يسمح لـ Maven بتجميع المشاريع من داخل IDE، وكذلك تعيين مسار الفئة لإكمال التعليمات البرمجية، وتسليط الضوء على أخطاء المترجم، وما إلى ذلك.
تتضمن أمثلة بيئات التطوير المتكاملة الشائعة التي تدعم التطوير باستخدام Maven ما يلي:
توفر هذه الإضافات أيضًا إمكانية تعديل ملف POM أو استخدام ملف POM لتحديد مجموعة التبعيات الكاملة للمشروع مباشرة داخل بيئة التطوير المتكاملة (IDE).
تُفقد بعض الميزات المدمجة في بيئات التطوير المتكاملة (IDEs) عند توقفها عن إجراء عملية الترجمة. على سبيل المثال، تتيح أداة JDT في Eclipse إعادة ترجمة ملف مصدر Java واحد بعد تعديله. تعمل العديد من بيئات التطوير المتكاملة مع مجموعة مشاريع مسطحة بدلاً من التسلسل الهرمي للمجلدات الذي يفضله Maven. يُعقّد هذا الأمر استخدام أنظمة إدارة التحكم في المصادر (SCM) في بيئات التطوير المتكاملة عند استخدام Maven. [ 17 ] [ 18 ] [ 19 ]
انظر أيضاً
- أباتشي كونتينوم (متوقف إنتاجه)
- جيلي أباتشي
- هادسون (متوقف إنتاجه)
- جينكينز
- قائمة برامج أتمتة البناء
- سوناتايب نيكسوس
مراجع
- ↑ "الإصدار 3.9.16" . 17 مايو 2026. تم الاطلاع عليه بتاريخ 18 مايو 2026 .
- ↑ "فهرس /maven2/" . مؤرشف من الأصل بتاريخ 17-09-2018 . تم الاطلاع عليه بتاريخ 15-04-2009 .
- ^ لاوجستول، تريجفي. "البرنامج المساعد MojoHaus Native Maven" .
- ↑ "IBiblio Resolver | Apache Ivy™" .
- ↑ "عمليات بناء قابلة للتكرار/التحقق - أباتشي مافن - مؤسسة برمجيات أباتشي" . cwiki.apache.org .
- ↑ "عمليات بناء قابلة للتكرار في جافا - DZone Java" . dzone.com .
- ↑ "سجل إصدارات مافن" . maven.apache.org .
- ↑ مرجع POM
- ↑ سوبر بوم
- ↑ بونزالان، إدوين. "ملحق مُترجم أباتشي مافن - مقدمة" .
- ↑ ماربايز، بريت بورتر، جيسون فان زيل، دينيس لوندبيرج، أوليفييه لامي، بنسون مارجوليس، كارل هاينز. "Maven – الإضافات المتاحة" .
- ↑ أميس، أليكس؛ زو بي إكس؛ وانغ يي إس (29 أكتوبر 2011). "أتمتة تطوير وإدارة الأجهزة الافتراضية السحابية" . IBM DeveloperWorks . IBM.
- ↑ بورتر، بريت. "مافن - مقدمة لدورة حياة البناء" .
- ↑ "diet4j - ضع ملفات Java JAR على نظام غذائي، وقم بتحميل وحدات maven حسب الحاجة" .
- 1 2 مافن سنترال
- ↑ "مافن: المرجع الكامل" . سوناتايب. مؤرشف من الأصل في 21 أبريل 2013. تم الاطلاع عليه في 11 أبريل 2013 .
- ↑ "maven.apache.org/eclipse-plugin.html" . مؤرشف من الأصل في 7 مايو 2015.
- ↑ "IntelliJ IDEA :: الميزات" . مؤرشف من الأصل بتاريخ 24-05-2015 . تم الاطلاع عليه بتاريخ 02-09-2009 .
- ↑ "MavenBestPractices - NetBeans Wiki" . مؤرشف من الأصل بتاريخ 14 يناير 2018. تم الاطلاع عليه بتاريخ 2 سبتمبر 2009 .
للمزيد من القراءة
- أوبراين، تيم؛ وآخرون . "مافن: المرجع الكامل" . Sonatype.com . Sonatype . تم الاطلاع عليه بتاريخ 15 مارس 2013 .
- مافن: الدليل النهائي . شركة سوناتايب. O'Reilly Media، Inc. 2009. ص. 470. ردمك 9780596551780تم الاطلاع عليه بتاريخ 17 أبريل 2013 .
{{cite book}}صيانة CS1: أخرى ( رابط ) - فان زيل، جيسون (1 أكتوبر 2008)، مافن: الدليل الشامل ( الطبعة الأولى)، أورايلي ميديا ، 468 صفحة ، رقم ISBN 978-0-596-51733-5
- "تشغيل اختبارات JUnit من Maven2". JUnit in Action ( الطبعة الثانية). منشورات مانينغ . 2011. الصفحات 152-168 . ISBN 978-1-935182-02-3.
- تخصيص بناء Maven . Packt. 2013. الصفحات 1-250 . ISBN 9781783987221.
- إتقان أباتشي مافن 3 . حزمة. 2014. ص. 298. ردمك 9781783983865.
روابط خارجية
- أدوات التجميع
- أدوات تطوير جافا
- مشاريع مؤسسة برمجيات أباتشي
- أتمتة البناء
- برنامج يستخدم ترخيص أباتشي
