複製鏈接
請複製以下鏈接發送給好友

清單文件

鎖定
Java平台中, 清單文件(Manifest file)是JAR檔案中包含的特殊文件。Manifest文件被用來定義擴展或檔案打包相關數據,是一個元數據文件,它包含了不同部分中的名/值對數據。如果一個JAR文件被用來作為可執行文件,那麼其中的Manifest文件需要指出該程序的主類文件。通常Manifest文件的文件名為MANIFEST.MF。
通常Manifest文件都與Java檔案相關,其他的情況比較少見。
中文名
清單文件
外文名
Manifest file
目    的
定義擴展或檔案打包相關數據
性    質
元數據文件

清單文件文件規範

JAR檔案文件在規定位置包含META-INF/MANIFEST.MF。在一個檔案文件中,只能有一個Manifest文件,而且必須在規定的META-INF文件夾中。
JDK1.0創建的Manifest文件內容如下:
Manifest-Version: 1.0
其中包含的所有條目均為名/值對。文件頭的名和值由冒號分隔。默認的Manifest文件顯示它遵從Manifest資源配置文件規範1.0。 Manifest文件還可以包含該檔案文件中所打包的其他文件的信息。具體Manifest文件中記錄的文件信息由該JAR文件的預期使用對象決定。默認的Manifest文件並不包含其他文件的信息,因此只包含唯一一行關於該Manifest文件自身的數據。 [1] 

清單文件特殊用法的Manifest文件頭

默認Manifest文件可以根據JAR文件的用處而作相應修改。如果JAR文件僅僅是用作存檔,那麼MANIFEST.MF文件則只包含默認信息。 然而,大多數JAR文件都不僅僅是用作壓縮存檔,相應的Manifest的文件也包含了特定的信息。下面列出了一些主要的特殊用法的Manifest文件頭:
JAR應用程序: 如果JAR文件被用作可執行的應用程序,那麼應用程序需要告訴Java虛擬機入口點位置。任意包含public static void main(String[] args)方法的類即為入口點。該信息由文件頭Main-Class提供,基本格式如下:
Main-Class: classname
classname值可由應用程序的入口點代替。
可下載擴展: 可下載擴展文件是由其他JAR文件中的Manifest文件所提及的JAR文件。通常情況下,JAR文件可以包含一個Applet小應用程序,該JAR文件的Manifest文件則指向一系列的JAR文件作為可下載擴展來支持該小應用程序。擴展之間也可以使用相同方法來進行指向。 可下載擴展信息是由小應用程序或另一擴展中的Manifest文件的Class-Path文件頭提供的。通常可見的Class-Path文件頭內容如下:
Class-Path: servlet.jar infobus.jar acme/beans.jar
在該文件頭信息中,servlet.jar,infobus.jar以及acme/beans.jar中的類將作為可下載擴展為Applet小應用程序或Java應用程序服務。Class-Path中給出的超鏈接是該Applet小應用程序或Java應用程序的相對地址。
封裝加封: JAR文件中的封裝可以選擇進行加封,即該封裝中所定義的類必須被存檔在相同的JAR文件中。封裝加封可以用來確保類版本的連貫性或作為安全措施。 要對封裝進行加封,需要對該封裝加入文件頭Name,然後加入文件頭Sealed,如下:
Name: myCompany/myPackage/ Sealed: true
文件頭Name的值為該封裝的相對路徑名。注意,該路徑名由‘/’結束以區別於文件名。在文件頭Name之後未採用空行隔開的文件頭,一律作用於該Name文件頭制定的文件或封裝。在上述例子中,由於Sealed緊接在Name: myCompany/myPackage header之後且沒有空行隔開,那麼該Sealed文件頭僅作用於myCompany/myPackage封裝。該代碼無法執行。
封裝版本:封裝版本規範定義了一系列Manifest文件頭來記錄版本信息。每個封裝都可以應用一系列Manifest文件頭。版本文件頭應當直接跟隨在Name文件頭。下面的例子展示了所有的版本文件頭:
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."
指定從屬文件:
MANIFEST.MF文件可以用來指定應用程序運行所必須加載的所有類文件。 [2] 
參考資料
  • 1.    Eckel B. Thinking in Java[M]. China Machine Press, 2003.
  • 2.    Clamp M, Cuff J, Searle S M, et al. The Jalview Java alignment editor.[J]. Bioinformatics, 2004, 20(3):426-427.