الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

وراء الكواليس : كيف يقوم ال Ide ببناء برنامجك بلمسة زو واحدة؟

بدأه delab في 15 يونيو 2008 · 3 رد · 1,283 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في هذا الدرس البسيط، سنحاول تسليط الضوء على واحدة من أقوى مميزات الــ IDE وهي خاصية بناء البرنامج بلمسة زر واحدة. وسنبحث عن كيفية عملها وراء الكواليس. (قم بتحميل المشروع من المرفقات).

Ant.PNG

والسر هو التالي :

يقوم الـ IDE (في الصورة NetBeans) بترجمة compiling وتكوين ملف الجار packaging to .jar file لمشروعك بلمسة زر واحدة. يعتمد الـ IDE طبعا في هذا على أدوات الجافا المختصة في هذا الشأن وهي الأدوات javac لترجمة البرنامج و jar لتكوين ملف الجار و java لتشغيل البرنامج. غير أن هذا الأمر ليس بالسهل بتاتا، خصوصا مع كبر البرنامج وكثرة الكلاسات وتفرعها واسأل من لا يستعمل الـ IDE عن مشاكل الــ CLASSPATH.

إذن كيف يقوم الـ IDE بتسيير كل ذلك بتلك السلاسة؟

يعتمد الــ IDE لتسيير هذه العملية (عملية البناء، أو Build) على الأداة Ant (النملة). يقوم الـ IDE بكتابة الملف build.xml اوتوماتيكيا، ومن خلال المعلومات الموجودة في هذا الملف يقوم الــ Ant ببناء البرنامج.

لكن هل من مثال توضيحي؟

طيب، اليكم المثال البسيط التالي :

public class MyClass {

	 private String salamMessage = "Salam Aleekoum!";   
	 public void saySalam() {
		System.out.println(salamMessage);
	 }
	public static void main(String[] args) {
			MyClass c = new MyClass();
	c.saySalam();
	}
}

إذا أردنا القيام بعملية البناء يدويا، فسنقوم بالتالي (فرضا) :

- نقوم بوضع الكلاس السابق في مجلد src وهذا للتنظيم بحيث نضع جميع الكود سورس داخل هذا المجلد

- انشاء مجلد build لاحتواء نتيجة الترجمة (ملفات .class)

- القيام بعملية ترجمة الملفات الموجودة في المجلد src (لا يوجد في مثالنا هذا إلا الملف MyClass.java) ووضع الناتج في المجلد build.

- القيام بانشاء الملف MyProject.jar يحتوي الملفات المترجمة (الموجودة في المجلد build)

- ثم تنفيذ هذا الملف الأخير.

بدل بأن نقوم بعملية البناء باستخدام الطريقة اليدوية السابقة، سنقوم باستعمال الأداة Ant.

أول شيء، نقوم بانشاء ملف build.xml ونملأه كما يلي :

build.PNG

يحتوي هذا الملف على مجموعة من "الأهداف" (أو targets). أعد النظر في ملف الــ build.xml السابق وحدد الأهداف التي بداخله (<target name="...">).

ستجد ثلاثة أهداف : compile، jar و run.

لاحظ في السطر الأول من الملف، المعلومة default="run" والتي تخبر الــ Ant بأن الهدف الذي من المفترض بأن يشتغل أولا عند البناء هو الهدف run.

لاحظ أيضا بأنه في الهدف run (السطر 13) هناك معلومة تشير بأن هذا الهدف يجب بأن يسبقه هدف آخر، وهو الهدف jar (depends="jar")، وفي نفس الوقت الهدف jar (السطر 6) يجب بأن يسبقه الهدف compile (السطر 2) ، فليس بامكاننا صنع ملف جار اذا لم نقم بعملية الترجمة قبل ذلك. وبهذه الطريقة يقوم الــ Ant بتشغيل هدف تلو الآخر حسب الأولوية.

لنلاحظ الآن ماذا يوجد داخل كل هدف، ولنبدأ بالهدف compile :

	<target name="compile">
		<mkdir dir="classes"/>
		<javac srcdir="src" destdir="classes"/>
	</target>

الأمر الأول في هذا الهدف هو الأمر <mkdir> والذي يقوم بانشاء مجلد بالاسم الذي نعطيه له (classes في هذه الحالة).

أما الأمر الثاني فهو الأمر <javac> والذي يقوم بعملية ترجمة الملفات الموجودة في المجلد "src" ويضع نتيجة الترجمة في المجلد "classes" الذي أنشأناه من قبل.

ماذا عن الهدف jar : ؟

	<target name="jar" depends="compile">
		<jar destfile="MyProject.jar" basedir="classes">
			<manifest>
				<attribute name="Main-Class" value="MyClass"/>
			</manifest>
		</jar>
	</target>

يستعمل هذا الهدف الأمر <jar> من أجل تجميع البرنامج في ملف جار. ويحتاج هذا الأمر إلى المعلومات التالية :

destfile اسم الملف الناتج

basedir المجلد الذي يحتوي على ملفات الكلاس المترجمة

manifest من أجل اضافة معلومة في ملف الجار التي من شأنها بأن تحدد الكلاس الرئيسي الذي سينفذ عند تنفيذ ملف الجار (في هذه الحالة MyClass).

أما الهدف الأخير، والذي هو الهدف run :

	<target name="run" depends="jar">
		<java jar="MyProject.jar" fork="true"/>			
	</target>

فيحتوي على الأمر <java> الذي يقوم بتنفيذ الملف MyProject.jar الذي ينشأ عن الهدف السابق.

كيف نقوم بتنفيذ هذا الملف باستعمال الـ Ant ؟

فقط، اذهب الى المجلد حيث يوجد الملف build.xml واكتب الأمر التالي في الكنسول :

ant

سترى في الشاشة ما يلي :

ant_build.PNG

وهو المطلوب.

ملاحظة :

لتثبيت الأداة، اتبع الخطوات في الموقع التالي (بالعربي).

http://dbassem.googlepages.com/ant

شكرا.

AntProject.zip

تم تعديل هذه المشاركة بواسطة delab في 16 يونيو 2008 في 00:08

#2

انني اقوم بحفظ روابط دروسك في ملف txt لاقوم بالاطلاع عليها بعد اليوم الاول من الشهر القادم موعد تقديم مشروع

دفع المخالفات المرورية عبر الانترنت عندي في الجامعة..لكي انهل من ما اعطاء الله لك من علم

احييك بكل صدر رحب على ما تقدمه ...وسنكون مواكبين للمواضيع ..لكن اعذرنا على ضيق الوقت ..والكم الهائل من الامتحانات..اكمل نحن معك

الله معك..

#3
اقتباس
لكن كيف الحال لو المشروع بة اكثر من package

سيأخذ الــ Ant هذا بالاعتبار، فقط يحتاج إلى المجلد حيث يوجد السورس كود (حتى معى وجود packages إذا أنه سيقوم تلقائيا ببناء مجلدات الـ packages داخل المجلد build).

اقتباس
,وملفات وصور

بالنسبة للملفات والصور، فيجب في هذا الحالة تغيير الأمر jar، لأننا سنقوم بادراج هذه الملفات داخل ملف الجار.

وسيصبح كالتالي :

<jar destfile="MyProject.jar" basedir="classes">
			<fileset dir="">
				<include name="images/*"/>	
			</fileset>
			<manifest>
				<attribute name="Main-Class" value="MyClass"/>
			</manifest>
		</jar>

أضفنا داخل الأمر جار، العنصر fileset لنقول له بأننا نريد اضافة مجموعة من الملفات داخل الجار. وفي ضمن العنصر fileset نعين الملفات التي نريد ادخالها، وفي حالتنا هذه، نريد ادخال الملفات الموجودة في المجلد images : (النسخة المعدلة موجودة في المرفقات)

 <include name="images/*"/>

في الحقيقة هناك الكثير من الأوامر في الـ Ant، ولكل عملها.

ألقي نظرة خفيفة على الموقع التالي للاطلاع على الأوامر المتوفرة : http://ant.apache.org/manual/tasksoverview.html

كملاحظة:

- بامكاننا استخدام الـ Ant أيضا في الدوت نت.

- بامكاننا استخدامه مثلا لتحضير قاعة البيانات ولخلق مختلف جداول الـ SQL عند ترجمة البرنامج.

- الـ Ant مستخدم بقوة في البرمجيات الجافوية المفتوحة المصدر (حتى يتسنى للمستخدم ترجمة الكود سورس بأمر واحد : ant) والبرمجيات الاحترافية أيضا.

شكرا.

AntProject_2.zip

تم تعديل هذه المشاركة بواسطة delab في 17 يونيو 2008 في 16:00

#4
Leavetrace كتب:
يعنى متى استخدم الAnt ومتى تكون الفائدة منها ضرورية اذا عندى IDE يقوم بعملها

أولا ، الــ IDE لا يقوم بكل شيء، وانما شأنه ترجمة وتنفيذ وتجميع البرنامج في ملف جار فقط.

ثانيا، أنظر مثلا إلى ملف build.xml منشأ عن طريق الـ NetBeans. سترى كيف هو معقد لدرجة كبيرة جدا، اذ يمكن اعادة كتابته في عدة أسطر فقط.

ثالثا، سأعطيك المثال التالي، فلنفرض أنك تريد في نهاية عملية البناء وضع البرنامج في ملف .zip وارسال هذا الملف إلى موقع مشترك للتطوير وتبليغ فريق العمل بأنك قمت برفع الملف!

بامكانك عمل كل ذلك بالــ Ant بواسطة مجموعة الأوامر التي يحتويها، وهذا بطريقة جد سهلة (من دون برمجة). طيب ستقول، وهل من الداعي تبليغ فريق العمل عند كل عملية بناء؟! والجواب هو أنه بامكانك عند استعمال الـ Ant تحديد الأهداف التي تريد تنفيذها. يعني فلنفرض بأنك تريد عمل compiling فقط، فستستدعي الأمر Ant مع اضافة اسم الهدف :

ant compile

واذا اردت عمل الفحوصات الأولية unit testing على برنامجك، فستقوم باستدعاء الـ Ant مع هدف كنت قد عرفته ضمن الــ build.xml يقوم بالفحوصات.

ant test

واذا اردت عمل ملف الأرشفة وارساله إلى موقع التطرير واخطار فريق العمل، فستنادي الـ Ant مع الهدف الذي كنت قد قمت بكتابته ضمن الـ build.xml وهو مثلا publish :

ant publish

وهكذا دواليك....

يقدم الـ IDE خدمات للـ Ant (رد الجميل :D )، بحيث بامكان المطور استدعاء احدى الأهداف مباشرة من داخل الــ IDE من دون استعمال الـ Console.

رابعا : افرض بأن الأستاذ في الجامعة يطلب من الطلبة انشاء برنامج معين، من دون فرض IDE معين.

باستعمال الـ Ant الكل سيكون مرتاح، فالطالب سيستعمال الـ IDE المفضل لديه والاستاذ لن يجد صعوبة في تنفيذ البرامج.

شكرا.

تم تعديل هذه المشاركة بواسطة delab في 18 يونيو 2008 في 19:00

مواضيع مشابهة