การใช้ไฟล์ MANIFEST.MF ใน Java


93

ฉันสังเกตเห็นว่าไฟล์ JAR, WAR และ EAR มีMANIFEST.MFไฟล์อยู่ใต้META-INFโฟลเดอร์

ใช้MANIFEST.MFไฟล์อะไรครับ? ไฟล์นี้ระบุอะไรได้ทั้งหมด



คำตอบ:


88

เนื้อหาของไฟล์ Manifest ในไฟล์ JAR ที่สร้างด้วย Java Development Kit เวอร์ชัน 1.0 มีดังต่อไปนี้

Manifest-Version: 1.0

รายการทั้งหมดเป็นคู่ชื่อ - ค่า ชื่อของส่วนหัวจะถูกแยกออกจากค่าด้วยเครื่องหมายจุดคู่ รายการเริ่มต้นแสดงให้เห็นว่าสอดคล้องกับเวอร์ชัน 1.0 ของข้อกำหนดรายการ ไฟล์ Manifest ยังสามารถมีข้อมูลเกี่ยวกับไฟล์อื่น ๆ ที่รวมอยู่ในไฟล์เก็บถาวร ข้อมูลไฟล์ที่บันทึกไว้ในรายการจะขึ้นอยู่กับวัตถุประสงค์การใช้งานสำหรับไฟล์ JAR ไฟล์รายการดีฟอลต์ไม่มีข้อสันนิษฐานเกี่ยวกับข้อมูลที่ควรบันทึกเกี่ยวกับไฟล์อื่นดังนั้นบรรทัดเดียวจึงมีข้อมูลเกี่ยวกับตัวมันเองเท่านั้น ส่วนหัว Manifest วัตถุประสงค์พิเศษ

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

แอปพลิเคชันที่รวมเป็นไฟล์ JAR:หากแอปพลิเคชันรวมอยู่ในไฟล์ JAR Java Virtual Machine จะต้องได้รับการแจ้งว่าจุดเริ่มต้นของแอ็พพลิเคชันคืออะไร จุดเข้าคือคลาสใด ๆ ที่มีเมธอด main (String [] args) แบบคงที่สาธารณะ ข้อมูลนี้มีให้ในส่วนหัวของ Main-Class ซึ่งมีรูปแบบทั่วไป:

Main-Class: classname

ชื่อคลาสของค่าจะถูกแทนที่ด้วยจุดเริ่มต้นของแอปพลิเคชัน

ดาวน์โหลดส่วนขยาย:ส่วนขยายการดาวน์โหลดคือไฟล์ JAR ที่อ้างอิงโดยไฟล์ manifest ของไฟล์ JAR อื่น ในสถานการณ์ทั่วไปแอพเพล็ตจะรวมอยู่ในไฟล์ JAR ซึ่งรายการอ้างอิงถึงไฟล์ JAR (หรือไฟล์ JAR หลายไฟล์) ซึ่งจะใช้เป็นส่วนขยายสำหรับวัตถุประสงค์ของแอพเพล็ตนั้น ส่วนขยายอาจอ้างอิงซึ่งกันและกันในลักษณะเดียวกัน ส่วนขยายการดาวน์โหลดระบุไว้ในฟิลด์ส่วนหัวของคลาสพา ธ ในไฟล์รายการของแอพเพล็ตแอปพลิเคชันหรือส่วนขยายอื่น ส่วนหัวของ Class-Path อาจมีลักษณะดังนี้:

Class-Path: servlet.jar infobus.jar acme/beans.jar

ด้วยส่วนหัวนี้คลาสในไฟล์ servlet.jar, infobus.jar และ acme / beans.jar จะทำหน้าที่เป็นส่วนขยายสำหรับวัตถุประสงค์ของแอพเพล็ตหรือแอปพลิเคชัน URL ในส่วนหัว Class-Path ถูกกำหนดโดยสัมพันธ์กับ URL ของไฟล์ JAR ของแอพเพล็ตหรือแอ็พพลิเคชัน

การปิดผนึกแพ็กเกจ:แพ็กเกจภายในไฟล์ JAR สามารถเลือกปิดผนึกได้ซึ่งหมายความว่าคลาสทั้งหมดที่กำหนดไว้ในแพ็กเกจนั้นต้องถูกเก็บถาวรในไฟล์ JAR เดียวกัน แพคเกจอาจถูกปิดผนึกเพื่อให้แน่ใจว่าเวอร์ชันสอดคล้องกันระหว่างคลาสในซอฟต์แวร์ของคุณหรือเป็นมาตรการรักษาความปลอดภัย ในการปิดผนึกแพ็กเกจจำเป็นต้องเพิ่มส่วนหัวของชื่อสำหรับแพ็กเกจตามด้วยส่วนหัวที่ปิดสนิทซึ่งคล้ายกับสิ่งนี้:

Name: myCompany/myPackage/
Sealed: true

ค่าส่วนหัวของชื่อคือชื่อพา ธ สัมพัทธ์ของแพ็กเกจ โปรดทราบว่าจะลงท้ายด้วย "/" เพื่อแยกความแตกต่างจากชื่อไฟล์ ส่วนหัวใด ๆ ที่ตามหลังส่วนหัวของชื่อโดยไม่มีบรรทัดว่างใด ๆ แทรกอยู่ให้นำไปใช้กับไฟล์หรือแพ็กเกจที่ระบุในส่วนหัวของชื่อ ในตัวอย่างข้างต้นเนื่องจากส่วนหัวที่ปิดผนึกเกิดขึ้นหลังส่วนหัวชื่อ: myCompany / myPackage โดยไม่มีบรรทัดว่างระหว่างส่วนหัวที่ปิดผนึกจะถูกตีความว่าใช้ (เท่านั้น) กับแพ็คเกจ myCompany / myPackage

การกำหนดเวอร์ชันแพ็กเกจ:ข้อกำหนดการกำหนดเวอร์ชันแพ็กเกจกำหนดส่วนหัวรายการต่างๆเพื่อเก็บข้อมูลการกำหนดเวอร์ชัน สามารถกำหนดส่วนหัวดังกล่าวได้หนึ่งชุดให้กับแต่ละแพ็คเกจ ส่วนหัวการกำหนดเวอร์ชันควรปรากฏอยู่ใต้ส่วนหัวของชื่อสำหรับแพ็กเกจ ตัวอย่างนี้แสดงส่วนหัวการกำหนดเวอร์ชันทั้งหมด:

Name: java/util/
Specification-Title: "Java Utility Classes" 
Specification-Version: "1.2"
Specification-Vendor: "Sun Microsystems, Inc.".
Implementation-Title: "java.util" 
Implementation-Version: "build57"
Implementation-Vendor: "Sun Microsystems, Inc."

36
กรุณาอย่าลอกงานใคร คุณควรเพิ่มลิงค์ไปยังหน้าเว็บ docs.oracle.com/javase/tutorial/deployment/jar/sealman.html
Damian Leszczyński - Vash

59
ไม่ใช่สำเนาสรุปเพิ่มเติม ... จาก 5 หน้า
Frank

65
คุณสามารถเรียกสรุปนี้ คัดลอกประโยคโดยไม่มีข้อสรุปหรือประเด็นเพิ่มเติม ฉันคิดว่าคุณควรเคารพคนที่ทำงานและเพิ่มลิงค์และคำพูด
Damian Leszczyński - Vash

19

Manifest.MF มีข้อมูลเกี่ยวกับไฟล์ที่อยู่ในไฟล์ JAR

เมื่อใดก็ตามที่ไฟล์ JAR ถูกสร้างขึ้นไฟล์ manifest.mf เริ่มต้นจะถูกสร้างขึ้นภายในโฟลเดอร์ META-INF และมีรายการเริ่มต้นดังนี้:

Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)

รายการเหล่านี้เป็นคู่ "header: value" รายการแรกระบุเวอร์ชันรายการและเวอร์ชันที่สองระบุเวอร์ชัน JDK ที่สร้างไฟล์ JAR

Main-Class header: เมื่อใช้ไฟล์ JAR เพื่อรวมแอปพลิเคชันในแพ็กเกจเราจำเป็นต้องระบุคลาสที่ให้บริการจุดเริ่มต้นของแอ็พพลิเคชัน เราให้ข้อมูลนี้โดยใช้ส่วนหัว "Main-Class" ของไฟล์รายการ

คลาสหลัก: {ชื่อคลาสแบบเต็ม}

ค่า 'Main-Class' นี่คือคลาสที่มีเมธอดหลัก หลังจากระบุรายการนี้เราสามารถเรียกใช้ไฟล์ JAR เพื่อเรียกใช้แอปพลิเคชัน

ส่วนหัว Class-Path: ส่วนใหญ่เราจำเป็นต้องเข้าถึงไฟล์ JAR อื่นจากคลาสที่รวมอยู่ในไฟล์ JAR ของแอปพลิเคชัน ซึ่งสามารถทำได้โดยระบุพา ธ แบบเต็มในไฟล์ manifest โดยใช้ส่วนหัว 'Class-Path'

เส้นทางคลาส: {jar1-name jar2-name directory-name / jar3-name}

ส่วนหัวนี้สามารถใช้เพื่อระบุไฟล์ JAR ภายนอกบนเครือข่ายโลคัลเดียวกันและไม่อยู่ภายใน JAR ปัจจุบัน

ส่วนหัวที่เกี่ยวข้องกับเวอร์ชันแพ็กเกจ: เมื่อใช้ไฟล์ JAR สำหรับการกำหนดเวอร์ชันแพ็กเกจส่วนหัวต่อไปนี้จะถูกใช้ตามที่ระบุโดยข้อกำหนดภาษา Java:

Headers in a manifest
Header                  | Definition
-------------------------------------------------------------------
Name                    | The name of the specification.
Specification-Title     | The title of the specification.
Specification-Version   | The version of the specification.
Specification-Vendor    | The vendor of the specification.
Implementation-Title    | The title of the implementation.
Implementation-Version  | The build number of the implementation.
Implementation-Vendor   | The vendor of the implementation.

ส่วนหัวที่เกี่ยวข้องกับการปิดผนึกบรรจุภัณฑ์:

เรายังสามารถระบุได้ว่าแพ็กเกจเฉพาะใด ๆ ภายในไฟล์ JAR ควรถูกปิดผนึกหมายความว่าคลาสทั้งหมดที่กำหนดไว้ในแพ็กเกจนั้นจะต้องถูกเก็บถาวรในไฟล์ JAR เดียวกัน สามารถระบุได้ด้วยความช่วยเหลือของส่วนหัว "ปิดผนึก"

ชื่อ: {package / some-package /} Sealed: true

ในที่นี้ชื่อแพ็กเกจจะต้องลงท้ายด้วย "/"

การเพิ่มความปลอดภัยด้วยไฟล์รายการ:

เราสามารถใช้รายการไฟล์ manifest เพื่อรับรองความปลอดภัยของเว็บแอปพลิเคชันหรือแพ็กเกจแอปเพล็ตที่มีแอตทริบิวต์ที่แตกต่างกันเช่น 'สิทธิ์', 'Codebae', 'ชื่อแอปพลิเคชัน', 'เชื่อถือได้เท่านั้น' และอื่น ๆ อีกมากมาย

โฟลเดอร์ META-INF:

โฟลเดอร์นี้เป็นที่ตั้งของไฟล์ Manifest นอกจากนี้ยังสามารถมีไฟล์เพิ่มเติมที่มีข้อมูลเมตาเกี่ยวกับแอปพลิเคชัน ตัวอย่างเช่นในไฟล์ JAR โมดูล EJB โฟลเดอร์นี้มีตัวบอกการปรับใช้ EJB สำหรับโมดูล EJB พร้อมกับไฟล์ manifest สำหรับ JAR นอกจากนี้ยังมีไฟล์ xml ที่มีการแมปการอ้างอิง EJB นามธรรมกับรีซอร์สคอนเทนเนอร์คอนกรีตของแอ็พพลิเคชันเซิร์ฟเวอร์ที่จะเรียกใช้

อ้างอิง:
https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

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