Sử dụng tệp MANIFEST.MF trong Java


Câu trả lời:


87

Nội dung của tệp kê khai trong tệp JAR được tạo bằng phiên bản 1.0 của Bộ công cụ phát triển Java như sau.

Manifest-Version: 1.0

Tất cả các mục nhập là cặp tên-giá trị. Tên của tiêu đề được phân tách khỏi giá trị của nó bằng dấu hai chấm. Tệp kê khai mặc định cho thấy rằng nó tuân theo phiên bản 1.0 của đặc tả tệp kê khai. Tệp kê khai cũng có thể chứa thông tin về các tệp khác được đóng gói trong kho lưu trữ. Chính xác thông tin tệp nào được ghi trong bản kê khai sẽ tùy thuộc vào mục đích sử dụng cho tệp JAR. Tệp kê khai mặc định không đưa ra giả định về thông tin mà nó sẽ ghi lại về các tệp khác, do đó, dòng đơn của nó chỉ chứa dữ liệu về chính nó. Tiêu đề Tệp kê khai Mục đích Đặc biệt

Tùy thuộc vào vai trò dự định của tệp JAR, tệp kê khai mặc định có thể phải được sửa đổi. Nếu tệp JAR được tạo chỉ với mục đích lưu trữ, thì tệp MANIFEST.MF không có mục đích. Hầu hết việc sử dụng tệp JAR vượt ra ngoài lưu trữ và nén đơn giản và yêu cầu thông tin đặc biệt phải có trong tệp kê khai. Tóm tắt dưới đây là mô tả ngắn gọn về các tiêu đề cần thiết cho một số hàm tệp JAR có mục đích đặc biệt

Các ứng dụng được đóng gói dưới dạng tệp JAR: Nếu một ứng dụng được đóng gói trong tệp JAR, Máy ảo Java cần được cho biết điểm vào của ứng dụng là gì. Điểm vào là bất kỳ lớp nào có phương thức public static void main (String [] args). Thông tin này được cung cấp trong tiêu đề Lớp chính, có dạng chung:

Main-Class: classname

Tên lớp giá trị sẽ được thay thế bằng điểm nhập của ứng dụng.

Tiện ích mở rộng tải xuống: Tiện ích mở rộng tải xuống là tệp JAR được tham chiếu bởi tệp kê khai của các tệp JAR khác. Trong một tình huống điển hình, một applet sẽ được đóng gói trong một tệp JAR có tệp kê khai tham chiếu đến tệp JAR (hoặc một số tệp JAR) sẽ đóng vai trò như một phần mở rộng cho các mục đích của applet đó. Các tiện ích mở rộng có thể tham chiếu lẫn nhau theo cùng một cách. Tiện ích mở rộng tải xuống được chỉ định trong trường tiêu đề Đường dẫn lớp trong tệp kê khai của một applet, ứng dụng hoặc một tiện ích mở rộng khác. Một tiêu đề Class-Path có thể trông giống như thế này, ví dụ:

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

Với tiêu đề này, các lớp trong tệp servlet.jar, infobus.jar và acme / bean.jar sẽ đóng vai trò là phần mở rộng cho các mục đích của applet hoặc ứng dụng. Các URL trong tiêu đề Class-Path được cung cấp liên quan đến URL của tệp JAR của applet hoặc ứng dụng.

Gói niêm phong: Một gói trong tệp JAR có thể được niêm phong tùy chọn, có nghĩa là tất cả các lớp được xác định trong gói đó phải được lưu trữ trong cùng một tệp JAR. Một gói có thể được niêm phong để đảm bảo tính nhất quán của phiên bản giữa các lớp trong phần mềm của bạn hoặc như một biện pháp bảo mật. Để niêm phong một gói, cần thêm tiêu đề Tên cho gói, sau đó là tiêu đề Đã niêm phong, tương tự như sau:

Name: myCompany/myPackage/
Sealed: true

Giá trị của tiêu đề Tên là tên đường dẫn tương đối của gói. Lưu ý rằng nó kết thúc bằng dấu '/' để phân biệt với tên tệp. Bất kỳ tiêu đề nào theo sau tiêu đề Tên, không có bất kỳ dòng trống nào xen vào, áp dụng cho tệp hoặc gói được chỉ định trong tiêu đề Tên. Trong ví dụ trên, bởi vì tiêu đề Sealed xuất hiện sau tiêu đề Name: myCompany / myPackage, không có dòng trống ở giữa, tiêu đề Sealed sẽ được hiểu là áp dụng (chỉ) cho gói myCompany / myPackage.

Phiên bản gói: Đặc tả phiên bản gói xác định một số tiêu đề tệp kê khai để giữ thông tin lập phiên bản. Một tập hợp các tiêu đề như vậy có thể được chỉ định cho mỗi gói. Các tiêu đề lập phiên bản sẽ xuất hiện ngay bên dưới tiêu đề Tên cho gói. Ví dụ này hiển thị tất cả các tiêu đề lập phiên bản:

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."

35
Vui lòng không sao chép tác phẩm của ai đó. Bạn nên thêm một liên kết đến trang web. docs.oracle.com/javase/tutorial/deployment/jar/sealman.html
Damian Leszczynski - Vash

57
Nó không phải là một bản sao, hơn nữa là một bản tóm tắt ... gồm 5 trang.
Frank

65
Bạn có thể gọi đây là bản tóm tắt. Các câu văn được sao chép, không có bất kỳ kết luận hoặc điểm bổ sung nào. Tôi nghĩ rằng bạn nên tôn trọng ai đó làm việc và thêm các liên kết và trích dẫn.
Damian Leszczynski - Vash

19

Manifest.MF chứa thông tin về các tệp có trong tệp JAR.

Bất cứ khi nào tệp JAR được tạo, tệp kê khai mặc định.mf được tạo bên trong thư mục META-INF và nó chứa các mục nhập mặc định như sau:

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

Đây là các mục nhập dưới dạng cặp "tiêu đề: giá trị". Cái đầu tiên chỉ định phiên bản tệp kê khai và cái thứ hai chỉ định phiên bản JDK mà tệp JAR được tạo.

Tiêu đề Main-Class: Khi tệp JAR được sử dụng để gói một ứng dụng trong một gói, chúng ta cần chỉ định lớp phục vụ một điểm đầu vào của ứng dụng. Chúng tôi cung cấp thông tin này bằng cách sử dụng tiêu đề 'Lớp chính' của tệp kê khai,

Lớp chính: {classname} đủ điều kiện

Giá trị 'Main-Class' ở đây là lớp có phương thức chính. Sau khi chỉ định mục này, chúng ta có thể thực thi tệp JAR để chạy ứng dụng.

Tiêu đề Class-Path: Hầu hết chúng ta cần truy cập vào các tệp JAR khác từ các lớp được đóng gói bên trong tệp JAR của ứng dụng. Điều này có thể được thực hiện bằng cách cung cấp các đường dẫn đủ điều kiện của chúng trong tệp kê khai sử dụng tiêu đề 'Đường dẫn Lớp',

Đường dẫn lớp: {jar1-name jar2-name directory-name / jar3-name}

Tiêu đề này có thể được sử dụng để chỉ định các tệp JAR bên ngoài trên cùng một mạng cục bộ chứ không phải bên trong JAR hiện tại.

Các tiêu đề liên quan đến phiên bản gói: Khi tệp JAR được sử dụng để lập phiên bản gói, các tiêu đề sau được sử dụng như được chỉ định bởi đặc tả ngôn ngữ 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.

Các tiêu đề liên quan đến niêm phong gói:

Chúng tôi cũng có thể chỉ định xem có bất kỳ gói cụ thể nào bên trong tệp JAR nên được niêm phong hay không, nghĩa là tất cả các lớp được xác định trong gói đó phải được lưu trữ trong cùng một tệp JAR. Điều này có thể được chỉ định với sự trợ giúp của tiêu đề 'Sealed',

Tên: {package / some-package /} Kín: true

Ở đây, tên gói phải kết thúc bằng '/'.

Tăng cường bảo mật với các tệp kê khai:

Chúng tôi có thể sử dụng các mục nhập tệp kê khai để đảm bảo tính bảo mật của ứng dụng web hoặc ứng dụng phụ mà nó đóng gói với các thuộc tính khác nhau như 'Quyền', 'Mã tiền', 'Tên-ứng dụng', 'Chỉ tin cậy' và nhiều thuộc tính khác.

Thư mục META-INF:

Thư mục này là nơi chứa tệp kê khai. Ngoài ra, nó có thể chứa nhiều tệp hơn chứa dữ liệu meta về ứng dụng. Ví dụ, trong tệp JAR mô-đun EJB, thư mục này chứa bộ mô tả triển khai EJB cho mô-đun EJB cùng với tệp kê khai cho JAR. Ngoài ra, nó chứa tệp xml chứa ánh xạ của một tham chiếu EJB trừu tượng đến tài nguyên vùng chứa cụ thể của máy chủ ứng dụng mà nó sẽ được chạy.

Tham khảo:
https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.