توضح هذه المقالة استخدام أمر JAR بالتفصيل، مما سيكون مفيدًا للجميع لتعلم وتلخيص استخدام أمر jar. التفاصيل هي كما يلي:
تعد حزمة JAR مستندًا مضغوطًا فريدًا في Java. في الواقع، يمكن للجميع فهمها كحزمة بتنسيق .zip. بالطبع، هناك اختلافات. يوجد ملف META-INF/MANIFEST.MF في حزمة JAR. عندما تجد حزمة JAR، سيتم إنشاؤها تلقائيًا.
يتم إنشاء حزمة JAR بواسطة أمر تثبيت JDK /bin/jar.exe. عندما نقوم بتثبيت JDK وتعيين المسار، يمكننا استخدام الأمر jar.exe بشكل طبيعي، وسيستخدم الفئات الموجودة في lib/tool.jar حزمة الأدوات. لا تقلق بشأن هذه التفاصيل.
دعونا نرى كيف يتم استخدامه:
1. معلمات أمر الجرة:
تنسيق أمر jar: jar {ctxuf}[ vme 0 M i ] [-C Directory] اسم الملف...
ومن بينها، يجب تحديد أحد المعلمات الأربع {ctxu}. [vfme 0 M i ] هو معلمة اختيارية، واسم الملف مطلوب أيضًا.
-c يقوم بإنشاء حزمة جرة
-t يعرض قائمة المحتويات في الجرة
-x حزمة جرة فك الضغط
-u يضيف الملفات إلى حزمة الجرة
-f يحدد اسم ملف حزمة الجرة
-v يقوم بإنشاء تقارير مفصلة وإخراجها إلى الأجهزة القياسية
-m يحدد ملف Manifest.mf (يمكنك إجراء بعض الإعدادات لحزمة الجرة ومحتوياتها في ملف Manifest.mf).
-0 لا يضغط محتويات حزمة الجرة عند إنشائها
-M لا تقم بإنشاء ملف بيان (Manifest.mf) لجميع الملفات. هذه المعلمة هي نفس الإعداد الذي يتجاهل المعلمة -m.
-i يقوم بإنشاء ملف فهرس لملف الجرة المحدد
-C يعني الانتقال إلى الدليل المقابل لتنفيذ أمر jar، وهو ما يعادل cd لذلك الدليل، ثم تنفيذ أمر jar بدون -C
2. أمثلة على استخدام الجرة:
(1) إنشاء حزمة جرة
jar cf hello.jar مرحبا
استخدم دليل الاختبار لإنشاء الحزمة hello.jar إذا كانت hello.jar موجودة، فسيتم استبدالها.
(2) إنشاء وعرض عملية التغليف
jar cvf hello.jar مرحباً
استخدم الدليل hello لإنشاء الحزمة hello.jar وإظهار مثال لعملية الإنشاء:
E:/>jar cvf hello.jar hello
يظهر
إضافة: مرحبًا/(اقرأ = 0) (اكتب = 0) (0% مخزن)
تمت الإضافة: hello/TestServlet2.class (قراءة = 1497) (كتابة = 818) (مضغوط بنسبة 45%)
تمت الإضافة: hello/HelloServlet.class (قراءة = 1344) (كتابة = 736) (مضغوط بنسبة 45%)
تمت الإضافة: hello/TestServlet1.class (قراءة = 2037) (كتابة = 1118) (مضغوط بنسبة 45%)
(3) عرض حزمة جرة:
jar tvf hello.jar عرض محتويات حزمة hello.jar يجب أن تكون حزمة الجرة المحددة موجودة بالفعل، وإلا سيحدث FileNoutFoundException.
(4) قم بفك ضغط حزمة الجرة:
jar xvf hello.jar
قم بفك ضغط hello.jar إلى الدليل الحالي
(5) إضافة الملفات إلى الجرة:
jar uf hello.jar HelloWorld.java
أضف HelloWorld.java إلى حزمة hello.jar
(6) إنشاء حزمة جرة محتوى غير مضغوطة:
jar cvf0 hello.jar *.class
قم بإنشاء حزمة jar غير مضغوطة باستخدام جميع ملفات .class الموجودة في الدليل الحالي
(7) قم بإنشاء حزمة jar بملف Manifest.mf:
جرة cvfm hello.jar البيان.mf مرحبا
تحتوي حزمة jar التي تم إنشاؤها على دليل META-INF إضافي، كما يحتوي دليل META-INF على ملف Manifest.mf إضافي. أما بالنسبة لدور Manifest.mf، فسيتم ذكره لاحقًا.
(8) تجاهل ملف Manifest.mf:
جرة cvfM hello.jar مرحبا
لا تتضمن حزمة الجرة التي تم إنشاؤها دليل META-INF وملف Manifest.mf.
(9) تطبيق إضافة -C:
jar cvfm hello.jar mymanifest.mf -C hello/
وهذا يعني التبديل إلى دليل hello ثم تنفيذ أمر jar.
(10)-i يُنشئ قائمة فهرس لملف الجرة:
عندما يكون المحتوى الموجود في حزمة الجرة جيدًا جدًا، يمكنك إنشاء ملف فهرس له، والذي يبدو خاليًا من المتاعب.
جرة أنا مرحبا.jar
بعد تنفيذ هذا الأمر، سيتم إنشاء ملف فهرس باسم INDEX.LIST في مجلد META-INF الخاص بحزمة hello.jar، وسيقوم بإنشاء قائمة باسم حزمة الجرة في الأعلى.
(11) تصدير قائمة إلغاء الضغط:
jar tvf hello.jar >hello.txt إذا كنت تريد عرض العملية التفصيلية لفك ضغط الجرة، وكانت حزمة الجرة كبيرة، فستومض معلومات الشاشة في هذا الوقت، ويمكنك إخراج القائمة إلى ملف، و نقدر ببطء!
(12)jar -cvf hello.jar hello/*
على سبيل المثال، بنية الدليل الأصلي هي كما يلي:
مرحبًا
|---كوم
|---org
لقد أردت في الأصل حزم دليل com ودليل org فقط، ولكن في هذا الوقت سيتم حزم أمر jar مع hello. يجب على الجميع الانتباه إلى هذا. سيتضمن الملف المضغوط الذي تم إنشاؤه بواسطة أمر jar الدليل بعده. يجب علينا الدخول إلى دليل hello وتنفيذ أمر jar.
ملاحظة: يمكن للمستخدم تحديد اسم الملفmanifest.mf بشكل عشوائي، لكن أمر jar يتعرف فقط على Manifest.mf وسيقوم بتحويل اسم الملف المحدد من قبل المستخدم وفقًا لذلك، لذلك لا داعي للقلق.
3.قواعد كتابة ملف Manifest.mf:
يجب أن تنتبه إلى بعض التفاصيل عند كتابة البيان.mf، فهو أمر متطلب للغاية، وقد واجهت العديد من الأخطاء هنا. من الذي يجعله بخيلًا جدًا؟
(1) حيث لا يمكن أن يكون هناك أسطر أو مسافات فارغة، لا يمكن أن يكون السطر الأول سطرًا فارغًا (لا يمكن أن يكون هناك سطر فارغ قبل السطر الأول)، ولا يمكن أن يكون هناك سطر فارغ بين الأسطر، ولا يمكن أن يكون هناك سطر فارغ في نهاية السطر هناك مسافات
(2) يجب أن يكون هناك سطر فارغ، ويجب أن يكون السطر الأخير سطرًا فارغًا (فقط قم بإضافة حرف رجوع بعد إدخال المحتوى الخاص بك)
(3) لا بد من وجود مساحة
المفتاح: يجب كتابة القيمة بمسافة بعد الفاصلة المنقوطة
4. كيفية استخدام الفئات الموجودة في حزم الجرة
دعونا نكتب مثالا صغيرا، بديهيا جدا!
public class Person{ public static int age() { return 30 }}-> javac Person.java->jar cvf person.jar Person.class
قم بتحويل الملف أعلاه إلى حزمة jar
اكتب فئة أخرى لنسميها:
public class MyAge{ public static void getAge() { System.out.println(Person.age() }});->javac MyAge.java ->java -classpath person.jar MyAge
يمكن للقراء المهتمين تصحيح هذا البرنامج
5. إنشاء حزمة جرة قابلة للتنفيذ
في بعض الأحيان عندما تكتب برنامجًا بنفسك، يكون هناك الكثير من الفئات، وبمرور الوقت، لا تعرف حتى أي فئة هي الفئة الرئيسية، علاوة على ذلك، قد يكون هناك الكثير من الصور أو الملفات الأخرى المستخدمة، مما يجعل الأمر مربكًا للقراءة في هذا الوقت، يمكنك التفكير في تحويلها إلى حزمة جرة قابلة للتنفيذ...
(1) قم بتحرير ملف Manifest.mf وأضف السطر التالي
الفئة الرئيسية: MyApplet
ملاحظة: يتم تحديد حجم الفئة الرئيسية، ويجب إدخال المسافة بعد النقطتين، وEnter بعد MyApplet، ثم حفظها.
(2) التعبئة
jar cvfm FirstApplet.jar البيان.mf MyApplet.class
ملاحظة: يتم تحديد البيان.mf كمسار الفئة (مثل: hello.Hello) أو اسم الملف (البرنامج الصغير) حيث يتم تخزين ملف Mani-Class: MyApplet.
(3) استخدام الجرة القابلة للتنفيذ
جافا -jar FirstApplet.jar
ويمكن استخدامه أيضًا في <applet></applet>:
<رمز التطبيق الصغير=MyApplet archive=FirstApplet.jar width=200 height=100></applet>
ملحوظة: لم يتم تحديد الفئة، يمكنك فقط كتابة اسم الفئة واسم الحزمة كما تريد.
6. قم بتوسيع الفصول الدراسية الخاصة بك
في دليل تثبيت JDK/jre/lib/ext، توفر لنا SUN الراحة لتوسيع فئاتنا الخاصة. يمكنك كتابة ملفات الفئة الخاصة بك في حزم .jar ووضعها في هذا الدليل، ويتم تثبيتها بواسطة فئة ExtClassLoader. محمل الفئة مسؤول عن التحميل، ومحمل فئة ExtClassLoader هو AppClassL يعد المُحمل الأصلي لمحمل فئة المُحمل، AppClassLoader، مسؤولاً بشكل أساسي عن تحميل الملفات ضمن مسار CLASSPATH، والآلية المستخدمة في Java هي تفويض المُحمل الأصلي، وبالتالي فإن ملفات الفئة الموجودة في الجرة المخزنة في هذا الدليل لا تحتوي على أي الإعدادات، يمكن لمحمل الفصل العثور على التحميل العادي، أليس كذلك مريحًا للغاية، ها...
إذا كان ملف .jar مخصصًا لتطبيقات صغيرة، فيمكنك إضافة السطرين التاليين إلى ملفmani.mf الخاص به قبل تعبئته في حزمة جرة.
مسار الفئة: FirstApplet.jarClass-path: SecondApplet.jarMain-Class: MyApplet
ملاحظة: يمكن تعيين مسار الفئة على عناصر متعددة، فقط اكتب اسم حزمة الجرة مباشرة. يتم استخدام الفئة الرئيسية بشكل أساسي عندما يكون هناك العديد من ملفات فئة .class في الجرة، ولا تعرف Java أي فئة هي الفئة الرئيسية، لذلك يجب تحديدها إذا كانت هناك فئة واحدة فقط في حزمة الجرة لا تحتاج إلى تحديد.
الترتيب الذي تستدعي به Java الفئات: الفئات في java/lib/ext ---> الفئات المحددة في Manifest.mf --> الفئات الموجودة في الدليل الحالي --> الفئات المحددة في مجموعة CLASSPATH.
7. اتصل بحزمة الجرة على شبكة URL
(1) قم بإنشاء عنوان URL لحزمة الجرة
URL u=new URL("jar:"+"FirstAppplet.jar"+!/");
(2) قم بإنشاء كائن jarURLConnection
JarURLConnection juc=(JarURLConnection)u.openConnection();
(3) قم بإرجاع اسم الفئة الرئيسية في حزمة الجرة
السمات attr=juc.getMainAttributes();String name=attr.getValue("Mani-Class");
تأكد من تعيين سمة Mani-Class بشكل صحيح في ملفmani.mf في حزمة الجرة الخاصة بك، ومرة أخرى، يجب عليك الانتباه إلى القواعد.
(4) قم بإنشاء كائن فئة بناءً على اسم الفئة الرئيسية التي تم الحصول عليها
Class c=Class.forName(name);
(5) استدعاء طريقتها الرئيسية وفقًا لكائن الفئة:
الطريقة cm=c.getMethod("main",new Class[]{String.class}); cm.invoc(null,new Object[]{});
نصيحة: ما ورد أعلاه يستخدم المعرفة حول آلية الانعكاس. إذا كنت مهتمًا بآليات الانعكاس المتعددة، فيمكنك التحقق من المحتوى ذي الصلة في الحزمة java.lang.reflect.
8. نصائح حول استخدام أوامر JAR:
(1) يقوم jar بإنشاء ملف ZIP مضغوط
اختبار جرة cvfM TestZIP.jar
ما عليك سوى إضافة المعلمة M حتى لا يتم إنشاء محتوى مرتبط بـ META-INF ثم قم بتغيير TestZIP.jar إلى TestZIP.zip، أليس الأمر بسيطًا جدًا....
(2) استخدم WinRAR لفك ضغط ملف .jar
كما قلنا أعلاه، فإن ملف JAR هو ملف مضغوط خاص، لذا بالطبع يمكن فك ضغطه باستخدام بعض أدوات فك الضغط شائعة الاستخدام، أما بالنسبة لكيفية فك ضغطه، فلا داعي لإخبارك.
(3) استخدم WinRAR لإنشاء ملفات .jar
لقد قلنا بالفعل أن الاختلاف الرئيسي بين حزم JAR وحزم ZIP هو وجود دليل META-INF إضافي في حزمة JAR، ويوجد ملف Manifest.mf ضمن دليل META-INF، ونحتاج فقط إلى إنشاء الملف ذي الصلة الدليل وضغطه.
هيكل الدليل هو كما يلي:
TestJar
|--ميتا-INF
|--manifest.mf
|--ملفات الصف ذات الصلة