บทความนี้จะอธิบายการใช้งานคำสั่ง 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: jar {ctxuf}[ vme 0 M i ][-C directory] ชื่อไฟล์...
ในหมู่พวกเขา ต้องเลือกหนึ่งในสี่พารามิเตอร์ {ctxu} [vfme 0 M i ] เป็นพารามิเตอร์ทางเลือก และจำเป็นต้องมีชื่อไฟล์ด้วย
-c สร้างแพ็คเกจ jar
-t แสดงรายการเนื้อหาใน jar
-x ขยายแพ็คเกจ jar
-u เพิ่มไฟล์ลงในแพ็คเกจ jar
-f ระบุชื่อไฟล์ของแพ็คเกจ jar
-v สร้างรายงานโดยละเอียดและส่งออกไปยังอุปกรณ์มาตรฐาน
-m ระบุไฟล์ manifest.mf (คุณสามารถทำการตั้งค่าบางอย่างสำหรับแพ็คเกจ jar และเนื้อหาในไฟล์ manifest.mf)
-0 ไม่บีบอัดเนื้อหาของแพ็คเกจ jar เมื่อสร้างมันขึ้นมา
-M อย่าสร้างไฟล์รายการ (Manifest.mf) สำหรับไฟล์ทั้งหมด พารามิเตอร์นี้เหมือนกับการตั้งค่าที่ละเว้นพารามิเตอร์ -m
-i สร้างไฟล์ดัชนีสำหรับไฟล์ jar ที่ระบุ
-C หมายถึง ไปที่ไดเร็กทอรีที่เกี่ยวข้องเพื่อรันคำสั่ง jar ซึ่งเทียบเท่ากับ cd ไปยังไดเร็กทอรีนั้น จากนั้นรันคำสั่ง jar โดยไม่มี -C
2. ตัวอย่างการใช้งาน Jar:
(1) สร้างแพ็คเกจขวด
jar cf hello.jar สวัสดี
ใช้ไดเร็กทอรีทดสอบเพื่อสร้างแพ็คเกจ hello.jar หากมี hello.jar จะถูกเขียนทับ
(2) สร้างและแสดงกระบวนการบรรจุภัณฑ์
jar cvf hello.jar สวัสดี
ใช้ไดเร็กทอรี hello เพื่อสร้างแพ็คเกจ hello.jar และแสดงตัวอย่างกระบวนการสร้าง:
E:/>jar cvf hello.jar สวัสดี
ประจักษ์
เพิ่ม: สวัสดี/(อ่านใน = 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 ต้องมีแพ็คเกจ jar ที่ระบุอยู่จริง ไม่เช่นนั้น FileNoutFoundException จะเกิดขึ้น
(4) คลายซิปแพ็คเกจ jar:
โถ xvf hello.jar
คลายซิป hello.jar ไปยังไดเร็กทอรีปัจจุบัน
(5) เพิ่มไฟล์ลงใน jar:
jar uf hello.jar HelloWorld.java
เพิ่ม HelloWorld.java ให้กับแพ็คเกจ hello.jar
(6) สร้างแพ็คเกจ jar เนื้อหาที่ไม่มีการบีบอัด:
jar cvf0 hello.jar *.class
สร้างแพ็กเกจ jar ที่ไม่บีบอัดโดยใช้ไฟล์ .class ทั้งหมดในไดเร็กทอรีปัจจุบัน
(7) สร้างแพ็คเกจ jar ด้วยไฟล์ manifest.mf:
jar cvfm hello.jar manifest.mf สวัสดี
แพ็คเกจ jar ที่สร้างขึ้นมีไดเร็กทอรี META-INF เพิ่มเติม และไดเร็กทอรี META-INF มีไฟล์ manifest.mf เพิ่มเติม สำหรับบทบาทของ manifest.mf จะมีการกล่าวถึงในภายหลัง
(8) ละเว้นไฟล์ manifest.mf:
jar cvfM hello.jar สวัสดี
แพ็กเกจ jar ที่สร้างขึ้นไม่รวมไดเร็กทอรี META-INF และไฟล์ manifest.mf
(9) เพิ่มแอปพลิเคชัน -C:
jar cvfm hello.jar mymanifest.mf -C สวัสดี/
หมายถึงการสลับไปยังไดเร็กทอรี hello จากนั้นดำเนินการคำสั่ง jar
(10)-i สร้างรายการดัชนีสำหรับไฟล์ jar:
เมื่อเนื้อหาในแพ็คเกจ jar ดีมาก คุณสามารถสร้างไฟล์ดัชนีสำหรับเนื้อหานั้นได้ ซึ่งดูเหมือนไม่มีปัญหาใดๆ เลย
โถ ฉัน hello.jar
หลังจากดำเนินการคำสั่งนี้ มันจะสร้างไฟล์ดัชนีชื่อ INDEX.LIST ในโฟลเดอร์ META-INF ของแพ็คเกจ hello.jar โดยจะสร้างรายการที่มีชื่อแพ็คเกจ jar ที่ด้านบน
(11) ส่งออกรายการคลายการบีบอัด:
jar tvf hello.jar >hello.txt หากคุณต้องการดูกระบวนการโดยละเอียดของการขยายขนาด jar และแพ็คเกจ jar มีขนาดใหญ่ ข้อมูลบนหน้าจอจะกะพริบ ในขณะนี้ คุณสามารถส่งออกรายการไปยังไฟล์ได้ และ ค่อยๆชื่นชม!
(12)jar -cvf hello.jar สวัสดี/*
ตัวอย่างเช่น โครงสร้างไดเร็กทอรีดั้งเดิมจะเป็นดังนี้:
สวัสดี
|---คอม
|---org
เดิมทีคุณต้องการจัดทำแพ็กเกจเฉพาะไดเร็กทอรี com และไดเร็กทอรี org แต่ในขณะนี้ คำสั่ง jar จะถูกแพ็กเกจร่วมกับ hello ทุกคนควรใส่ใจกับสิ่งนี้ ไฟล์บีบอัดที่สร้างโดยคำสั่ง jar จะมีไดเร็กทอรีตามมาด้วย เราควรเข้าสู่ไดเร็กทอรี hello และดำเนินการคำสั่ง jar
หมายเหตุ: ผู้ใช้สามารถระบุชื่อไฟล์ manifest.mf ได้ตามใจชอบ แต่คำสั่ง jar จะจดจำเฉพาะ Manifest.mf เท่านั้น โดยจะแปลงชื่อไฟล์ที่ผู้ใช้ระบุตามลำดับ ดังนั้นผู้ใช้จึงไม่ต้องกังวล
3.กฎการเขียนไฟล์ Manifest.mf:
คุณต้องใส่ใจกับรายละเอียดบางอย่างเมื่อเขียน manifest.mf มันมีความต้องการมาก ฉันพบข้อผิดพลาดมากมายที่นี่ ใครทำให้มันตระหนี่ ไม่มีทาง ดังนั้นฉันจึงแสดงรายการไว้ที่นี่สำหรับทุกคน
(1) ในกรณีที่ไม่สามารถมีบรรทัดหรือช่องว่างได้ บรรทัดแรกจะต้องไม่เป็นบรรทัดว่าง (จะต้องไม่มีบรรทัดว่างก่อนบรรทัดแรก) จะต้องไม่มีบรรทัดว่างระหว่างบรรทัด และจะต้องไม่มีบรรทัดว่างที่ ปลายสายมีช่องว่าง
(2) ต้องมีบรรทัดว่างและบรรทัดสุดท้ายต้องเป็นบรรทัดว่าง (เพียงเพิ่มการขึ้นบรรทัดใหม่หลังจากป้อนเนื้อหาของคุณ)
(3) จะต้องมีช่องว่าง
คีย์: ค่าจะต้องเขียนด้วยช่องว่างหลังเครื่องหมายอัฒภาค
4. วิธีใช้คลาสในแพ็คเกจ jar
มาเขียนตัวอย่างเล็กๆ น้อยๆ กันดีกว่า!
บุคคลในคลาสสุดท้ายสาธารณะ { public static int age() { return 30; }}-> javac Person.java->jar cvf person.jar Person.class
ทำให้ไฟล์ด้านบนเป็นแพ็คเกจ jar
เขียนคลาสอื่นเพื่อเรียกมันว่า:
MyAge คลาสสาธารณะ { public static void getAge() { System.out.println(Person.age() }}->javac MyAge.java ->java -classpath person.jar MyAge
ผู้อ่านที่สนใจสามารถแก้ไขข้อบกพร่องของโปรแกรมนี้ได้
5. สร้างแพ็คเกจ jar ที่ปฏิบัติการได้
บางครั้งเวลาคุณเขียนโปรแกรมเอง ก็มีคลาสต่างๆ มากมาย เมื่อเวลาผ่านไปคุณก็ไม่รู้ด้วยซ้ำว่าคลาสไหนเป็นคลาสหลัก นอกจากนี้ อาจมีรูปภาพหรือไฟล์อื่นๆ ที่ใช้อยู่เป็นจำนวนมาก ซึ่งทำให้สับสน เพื่ออ่าน ในเวลานี้ คุณสามารถพิจารณาทำให้เป็นแพ็คเกจ jar ที่ปฏิบัติการได้...
(1) แก้ไขไฟล์ manifest.mf และเพิ่มบรรทัดต่อไปนี้
คลาสหลัก: MyApplet
หมายเหตุ: ขนาดของคลาสหลักถูกกำหนดไว้ ช่องว่างหลังเครื่องหมายทวิภาค และต้องป้อน Enter หลัง MyApplet จากนั้นจึงบันทึก
(2) การบรรจุ
jar cvfm FirstApplet.jar manifest.mf MyApplet.class
หมายเหตุ: manifest.mf ถูกระบุเป็นพาธของคลาส (เช่น: hello.Hello) หรือชื่อไฟล์ (แอปเพล็ต) ที่เก็บไฟล์ Mani-Class: MyApplet
(3) การใช้ jar ปฏิบัติการ
ชวา -jar FirstApplet.jar
นอกจากนี้ยังสามารถใช้ใน <applet></applet>:
<รหัสแอปเพล็ต=ไฟล์ MyApplet=ความกว้าง FirstApplet.jar=200 ความสูง=100></แอปเพล็ต>
หมายเหตุ: ไม่มีการกำหนดคลาส คุณสามารถเขียนได้หนึ่งคลาส คุณสามารถเลือกชื่อคลาสและชื่อแพ็คเกจได้ตามต้องการ
6. ขยายชั้นเรียนของคุณเอง
ในไดเร็กทอรีการติดตั้ง JDK/jre/lib/ext SUN มอบความสะดวกให้เราในการขยายคลาสของเราเอง คุณสามารถพิมพ์ไฟล์คลาสของคุณเองลงในแพ็คเกจ .jar และวางลงในไดเร็กทอรีนี้ ซึ่งถูกติดตั้งโดยคลาส ExtClassLoader ตัวโหลดคลาสมีหน้าที่รับผิดชอบในการโหลด และตัวโหลดคลาส ExtClassLoader คือ AppClassL ตัวโหลดหลักของตัวโหลดคลาสตัวโหลด AppClassLoader มีหน้าที่หลักในการโหลดไฟล์ภายใต้พาธ CLASSPATH และกลไกที่ใช้ใน Java คือการมอบหมายตัวโหลดพาเรนต์ ดังนั้นไฟล์คลาสใน jar ที่เก็บไว้ในไดเร็กทอรีนี้จึงไม่มี การตั้งค่าคลาสโหลดเดอร์สามารถค้นหาการโหลดปกติได้ไม่สะดวกเหรอฮะ...
หาก .jar ของคุณใช้สำหรับแอปพลิเคชันแอปเพล็ต คุณสามารถเพิ่มสองบรรทัดต่อไปนี้ลงใน manifest.mf ก่อนที่จะบรรจุลงในแพ็คเกจ jar
Class-Path: FirstApplet.jarClass-path: SecondApplet.jarMain-Class: MyApplet
หมายเหตุ: Class-path สามารถตั้งค่าเป็นหลายรายการได้ เพียงเขียนชื่อแพ็กเกจ jar โดยตรง Main-Class จะใช้เป็นหลักเมื่อมีไฟล์คลาส .class หลายไฟล์ใน jar โดยไม่รู้ว่าไฟล์ใดเป็นคลาสหลัก ดังนั้นจึงต้องระบุหากมีเพียงคลาสเดียวในแพ็คเกจ jar ไม่จำเป็นต้องระบุ
ลำดับที่ Java เรียกคลาส: คลาสใน java/lib/ext ---> คลาสที่ระบุใน Manifest.mf --> คลาสในไดเร็กทอรีปัจจุบัน --> คลาสที่ระบุในชุด CLASSPATH
7. เรียกแพ็คเกจ jar บนเครือข่าย URL
(1) สร้าง URL ของแพ็คเกจ jar
URL u=URL ใหม่ ("jar:"+"FirstAppplet.jar"+!/");
(2) สร้างวัตถุ jarURLConnection
JarURLConnection juc=(JarURLConnection)u.openConnection();
(3) คืนชื่อของคลาสหลักในแพ็คเกจ jar
คุณสมบัติ attr=juc.getMainAttributes();ชื่อสตริง=attr.getValue("Mani-Class");
ตรวจสอบให้แน่ใจว่าแอตทริบิวต์ Mani-Class ได้รับการตั้งค่าอย่างถูกต้องใน manifest.mf ในแพ็คเกจ jar ของคุณ คุณต้องให้ความสนใจกับกฎอีกครั้ง
(4) สร้างวัตถุคลาสตามชื่อคลาสหลักที่ได้รับ
คลาส c=Class.forName(ชื่อ);
(5) เรียกวิธีการหลักตามวัตถุคลาส:
วิธีการ cm=c.getMethod("main",new Class[]{String.class}); cm.invoid(null,new Object[]{});
เคล็ดลับ: ข้อมูลข้างต้นใช้ความรู้เกี่ยวกับกลไกการสะท้อนกลับ หากคุณสนใจกลไกการสะท้อนหลายรายการ คุณสามารถตรวจสอบเนื้อหาที่เกี่ยวข้องได้ในแพ็คเกจ java.lang.reflect
8. เคล็ดลับในการใช้คำสั่ง JAR:
(1) jar สร้างไฟล์ ZIP ที่ถูกบีบอัด
การทดสอบ jar 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 เราจำเป็นต้องสร้างไฟล์ที่เกี่ยวข้องเท่านั้น ไดเร็กทอรีและบีบอัดข้อมูล
โครงสร้างไดเรกทอรีเป็นดังนี้:
โถทดสอบ
|--เมตา-INF
|--manifest.mf
|--ไฟล์คลาสที่เกี่ยวข้อง