ไฟล์ jar มีอะไรบ้าง?


88

ในฐานะนักศึกษาฝึกงานฉันใช้รหัส บริษัท ในโครงการของฉันและพวกเขามักจะส่งjarไฟล์เพื่อทำงานด้วย ฉันเพิ่มมันลงในบิลด์pathอินEclipseและโดยปกติแล้วทุกอย่างก็เรียบร้อยดี

อย่างไรก็ตามฉันอยากรู้ว่าแต่ละคลาสมีอะไรบ้างและเมื่อฉันพยายามเปิดคลาสใดคลาสหนึ่งในjarไฟล์มันก็บอกฉันว่าฉันต้องการซอร์สไฟล์

สิ่งนี้หมายความว่า? ฉันมาจากพื้นหลังC / C ++ดังนั้นจึงjarคล้ายกับ.oไฟล์ที่คอมไพล์แล้วและสิ่งที่ฉันเห็นคือ.hสิ่ง? หรือมีรหัสจริงในjarไฟล์ที่ฉันใช้ที่เข้ารหัสไว้ฉันจึงไม่สามารถอ่านได้

ขอบคุณสำหรับคำตอบทั้งหมด!

แก้ไข:
ขอบคุณพวกฉันรู้ว่ามันเป็นเหมือนไฟล์เก็บถาวร แต่ฉันก็งงว่าทำไมเมื่อฉันพยายามเปิด.classไฟล์ฉันได้รับตัวละครแบบสุ่มจำนวนมาก ผลลัพธ์คล้ายกันเมื่อฉันพยายามเปิด.oไฟล์ใน C ดังนั้นฉันแค่อยากให้แน่ใจ
ขอบคุณ!




5
@ บลูมูน: สิ่งที่ตลกคือ Google พาฉันมาที่นี่ : p
user1036719

@ user1036719 ถึงจะดีที่คุณพบคำตอบที่นี่ แต่ยังมีอีกลิงค์หนึ่งที่มาก่อนหน้านี้ และนี่ไม่ใช่คำถามเกี่ยวกับการเขียนโปรแกรมที่ต้องได้รับการสนับสนุนใน SO ฉันไม่ได้ลงคะแนนหรือปิดโหวต
PP

คำตอบ:


88

ไฟล์ JAR เป็นเพียงไฟล์ ZIP มันสามารถมีอะไรก็ได้ - โดยปกติจะมีโค้ด Java ที่คอมไพล์แล้ว (* .class) แต่บางครั้งก็มีซอร์สโค้ด Java (* .java) ด้วย

อย่างไรก็ตาม Java สามารถถอดรหัสได้ - ในกรณีที่นักพัฒนาทำให้โค้ดของเขาสับสนคุณจะไม่ได้รับชื่อคลาส / ฟังก์ชัน / ตัวแปรที่เป็นประโยชน์


53

อย่างไรก็ตามฉันอยากรู้ว่าแต่ละคลาสมีอะไรบ้างและเมื่อฉันพยายามเปิดคลาสใดคลาสหนึ่งในไฟล์ jar มันบอกฉันว่าฉันต้องการซอร์สไฟล์

ไฟล์ jar เป็นไฟล์ zip ที่มีไฟล์. class และทรัพยากรอื่น ๆ ที่อาจเกิดขึ้น (และข้อมูลเมตาเกี่ยวกับ jar เอง) เป็นการยากที่จะเปรียบเทียบ C กับ Java เนื่องจากโค้ด Java byte เก็บข้อมูลเมตาไว้มากกว่ารูปแบบไบนารีส่วนใหญ่ แต่ไฟล์คลาสจะถูกคอมไพล์โค้ดแทนซอร์สโค้ด

หากคุณเปิดไฟล์ jar ด้วยยูทิลิตี้ zip หรือเรียกใช้jar xf foo.jarคุณสามารถแตกไฟล์จากไฟล์นั้นและดูที่ไฟล์เหล่านั้น โปรดทราบว่าคุณไม่จำเป็นต้องใช้ไฟล์ jar เพื่อเรียกใช้โค้ด Java - classloaders สามารถโหลดข้อมูลคลาสได้โดยตรงจากระบบไฟล์หรือจาก URL รวมทั้งจากไฟล์ jar


ขอบคุณฉันรู้ว่ามันเหมือนไฟล์เก็บถาวรเพราะฉันสามารถคลายซิปได้ แต่ฉันก็งงว่าทำไมไม่มีไฟล์. class ที่มีข้อความที่อ่านได้ ขอบคุณสำหรับการอธิบายฉันเดาว่า. class จะเหมือนกับไฟล์. o
joshualan

19

วิธีที่ดีที่สุดในการทำความเข้าใจว่าไฟล์ jar มีอะไรบ้างโดยดำเนินการดังนี้:

ไปที่บรรทัดคำสั่งและดำเนินการ jar tvf jarfilename.jar


13

jarไฟล์เป็นไฟล์ซิปที่มีไฟล์เพิ่มเติมบางอย่างที่มีเมตาดาต้า (แม้จะมีนามสกุล. jar แต่ก็อยู่ในรูปแบบ zip และยูทิลิตี้ใด ๆ ที่จัดการกับไฟล์. zip ก็สามารถจัดการกับไฟล์. jar ได้เช่นกัน)

http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html

ไฟล์ Jar สามารถมีไฟล์ประเภทใดก็ได้ แต่โดยปกติจะมีไฟล์คลาสและรองรับไฟล์คอนฟิกูเรชัน (คุณสมบัติ) กราฟิกและไฟล์ข้อมูลอื่น ๆ ที่แอปพลิเคชันต้องการ

ไฟล์คลาสมีโค้ด Java ที่คอมไพล์แล้วซึ่ง Java Virtual Machine เรียกใช้งานได้

http://en.wikipedia.org/wiki/Java_class_file


1
บวก 1 เนื่องจากคุณเชื่อมโยงกับมาตรฐาน
Ciro Santilli 郝海东冠状病六四事件法轮功

10

JAR ย่อมาจาก Java ARchive เป็นรูปแบบไฟล์ตามรูปแบบไฟล์ ZIP ที่เป็นที่นิยมและใช้สำหรับการรวมไฟล์จำนวนมากให้เป็นหนึ่งเดียว แม้ว่า JAR จะสามารถใช้เป็นเครื่องมือเก็บถาวรทั่วไปได้ แต่แรงจูงใจหลักในการพัฒนาคือเพื่อให้แอพเพล็ต Java และส่วนประกอบที่จำเป็น (ไฟล์. class, รูปภาพและเสียง) สามารถดาวน์โหลดไปยังเบราว์เซอร์ได้ในธุรกรรม HTTP เดียวแทนที่จะเปิด การเชื่อมต่อใหม่สำหรับแต่ละชิ้น สิ่งนี้ช่วยเพิ่มความเร็วในการโหลดแอพเพล็ตลงในเว็บเพจและเริ่มทำงานได้อย่างมาก รูปแบบ JAR ยังรองรับการบีบอัดซึ่งจะช่วยลดขนาดของไฟล์และปรับปรุงเวลาในการดาวน์โหลดให้ดีขึ้น นอกจากนี้แต่ละรายการในไฟล์ JAR อาจได้รับการเซ็นชื่อแบบดิจิทัลโดยผู้เขียนแอพเพล็ตเพื่อพิสูจน์ตัวตนที่มา


5

ไฟล์ Jar มีไบนารีคลาส Java ที่คอมไพล์แล้วในรูปแบบ*.classที่สามารถแปลงเป็น.javaคลาสที่อ่านได้โดยการถอดรหัสโดยใช้ตัวถอดรหัสโอเพนซอร์ส jar ยังมีทางเลือกMETA-INF/MANIFEST.MFซึ่งบอกเราถึงวิธีใช้ไฟล์ jar - ระบุไฟล์ jar อื่นสำหรับการโหลดด้วย jar


3

Jar (Java Archive) มีกลุ่มของไฟล์. class

1. ในการสร้างไฟล์ Jar (ไฟล์ Zip)

 if one .class (say, Demo.class) then use command jar -cvf NameOfJarFile.jar Demo.class (usually it’s not feasible for only one .class file)

 if more than one .class (say, Demo.class , DemoOne.class) then use command jar -cvf NameOfJarFile.jar Demo.class DemoOne.class

 if all .class is to be group (say, Demo.class , DemoOne.class etc) then use command jar -cvf NameOfJarFile.jar *.class

2. ในการแตกไฟล์ Jar (Unzip File)

    jar -xvf NameOfJarFile.jar

3. เพื่อแสดงสารบัญ

    jar -tvf NameOfJarFile.jar

2

ไฟล์. jar คล้ายกับไฟล์. exe โดยพื้นฐานแล้วไฟล์เหล่านี้เป็นไฟล์ zip ที่สามารถเรียกใช้งานได้

ในไฟล์ jar คุณจะเห็นโฟลเดอร์และไฟล์คลาส ไฟล์คลาสแต่ละไฟล์คล้ายกับไฟล์. o ของคุณและเป็นไฟล์เก็บถาวรจาวาที่คอมไพล์แล้ว

หากคุณต้องการดูรหัสในไฟล์ jar ให้ดาวน์โหลดตัวถอดรหัส java (อยู่ที่นี่: http://java.decompiler.free.fr/?q=jdgui ) และตัวแยก. jar (7zip ทำงานได้ดี)



1

ไฟล์. jar มีโค้ดที่คอมไพล์แล้ว (ไฟล์ * .class) และข้อมูล / ทรัพยากรอื่น ๆ ที่เกี่ยวข้องกับโค้ดนั้น ช่วยให้คุณสามารถรวมไฟล์หลายไฟล์ไว้ในไฟล์เก็บถาวรเดียว นอกจากนี้ยังมีข้อมูลเมตา เนื่องจากเป็นไฟล์ zip จึงสามารถบีบอัดข้อมูลที่คุณใส่ลงไปได้

สองสิ่งที่ฉันพบว่ามีประโยชน์

http://www.skylit.com/javamethods/faqs/createjar.html

http://docs.oracle.com/javase/tutorial/deployment/jar/basicsindex.html

ในทางปฏิบัติหนังสือ OSGi ให้คำจำกัดความไฟล์ JAR ว่า "JAR เป็นไฟล์ที่เก็บถาวรตามรูปแบบไฟล์ ZIP ทำให้สามารถรวมไฟล์จำนวนมากเป็นไฟล์เดียวได้โดยทั่วไปไฟล์ที่อยู่ในไฟล์เก็บถาวรจะเป็นการผสมผสานระหว่างไฟล์คลาส Java และทรัพยากร ไฟล์เช่นรูปภาพและเอกสารนอกจากนี้ข้อกำหนดยังกำหนดตำแหน่งมาตรฐานภายในไฟล์เก็บถาวร JAR สำหรับข้อมูลเมตา - โฟลเดอร์ META-INF และชื่อไฟล์มาตรฐานและรูปแบบต่างๆภายในนั้นโดยตรงซึ่งสำคัญที่สุดคือไฟล์ MANIFEST.MF "


1

เพียงตรวจสอบว่าaopalliance.jarไฟล์นั้นมี.javaไฟล์แทน.classไฟล์หรือไม่ ถ้าเป็นเช่นนั้นให้แตกไฟล์ jar นำเข้าใน eclipse และสร้าง jar โดยใช้ eclipse มันได้ผลสำหรับฉัน


1

ในขณะที่เรียนรู้เกี่ยวกับ JAR ฉันเจอหัวข้อนี้ แต่ไม่สามารถรับข้อมูลเพียงพอสำหรับคนอย่างฉันที่มีพื้นฐาน. NET ดังนั้นฉันจะเพิ่มคะแนนเล็กน้อยที่สามารถช่วยคนอย่างฉันที่มีพื้นหลัง. NET

ก่อนอื่นเราต้องกำหนดแนวคิดที่คล้ายกันกับ JAR ใน. NET ซึ่งแอสเซมบลีและแอสเซมบลีใช้ร่วมกันได้มากกับไฟล์ Java JAR

ดังนั้นแอสเซมบลีจึงเป็นหน่วยพื้นฐานของการบรรจุโค้ดในสภาพแวดล้อม. NET แอสเซมบลีมีอยู่ในตัวและโดยทั่วไปจะมีรหัสกลางจากการคอมไพล์คลาสข้อมูลเมตาเกี่ยวกับคลาสและไฟล์อื่น ๆ ที่จำเป็นสำหรับโค้ดแพ็กเกจเพื่อดำเนินงาน เนื่องจากแอสเซมบลีเป็นหน่วยพื้นฐานของการบรรจุโค้ดจึงต้องดำเนินการหลายอย่างที่เกี่ยวข้องกับการโต้ตอบกับประเภทในระดับแอสเซมบลี ตัวอย่างเช่นการให้สิทธิ์การรักษาความปลอดภัยการปรับใช้โค้ดและการกำหนดเวอร์ชันจะกระทำในระดับแอสเซมบลี

ไฟล์Java JARทำงานคล้ายกันใน Java โดยมีความแตกต่างส่วนใหญ่อยู่ในการนำไปใช้งาน โดยทั่วไปแอสเซมบลีจะถูกจัดเก็บเป็นEXE หรือ DLLในขณะที่ไฟล์ JAR จะถูกเก็บไว้ในรูปแบบไฟล์ZIP

แหล่งที่มาของข้อมูล -> 5- ส่วนประกอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.