清單檔案

在電腦領域, 清單檔案(Manifest files)通常是元資料檔案,這些元資料通常是固定值,用於描述程式的相關資訊。清單檔案可以是一個檔案,也可以是多個檔案[1]

Android

清單檔案,描述了關於應用的必要資訊。這些資訊用於Android構建工具、Android系統、Google Play[2]

Docker

Docker中,鏡像的清單資料並不是以檔案的形式展示,而是通過命令列docker manifest方式在控制台展示。manifest包含的是鏡像資訊,如:層數、大小、摘要碼。[3]

Java

Java平台中, 清單檔案(Manifest file)是JAR檔案[4][5]中包含的特殊檔案。Manifest檔案被用來定義擴充或檔案打包相關資料,是一個元資料檔案,它包含了不同部分中的名/值對英語Attribute–value_pair資料。如果一個JAR檔案被用來作為可執行檔,那麼其中的Manifest檔案需要指出該程式的主類檔案。通常Manifest檔案的檔名為MANIFEST.MF

通常Manifest檔案都與Java檔案相關,其他的情況比較少見。

檔案規範

JAR檔案檔案在規定位置包含META-INF/MANIFEST.MF [6]。在一個檔案檔案中,只能有一個Manifest檔案,而且必須在規定的META-INF資料夾中。

JDK1.0建立的Manifest檔案內容如下:

Manifest-Version: 1.0

其中包含的所有條目均為名/值對。檔案頭的名和值由冒號分隔。預設的Manifest檔案顯示它遵從Manifest資源設定檔規範1.0。 Manifest檔案還可以包含該檔案檔案中所打包的其他檔案的資訊。具體Manifest檔案中記錄的檔案資訊由該JAR檔案的預期使用對象決定。預設的Manifest檔案並不包含其他檔案的資訊,因此只包含唯一一行關於該Manifest檔案自身的資料。

特殊用法的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檔案可以用來指定應用程式執行所必須載入的所有類檔案。

參見

參考文獻

  1. ^ Creating GitHub Apps from a manifest. GitHub Developer. [2020-02-26]. (原始內容存檔於2020-10-28) (英語). 
  2. ^ App Manifest Overview. Android Developers. [2020-02-26]. (原始內容存檔於2021-03-14) (英語). 
  3. ^ docker manifest. Docker Documentation. 2020-02-25 [2020-02-26]. (原始內容存檔於2021-03-26) (英語). 
  4. ^ 存档副本. [2011-11-17]. (原始內容存檔於2012-06-26). 
  5. ^ 存档副本. [2011-11-17]. (原始內容存檔於2011-11-02). 
  6. ^ 存档副本. [2011-11-17]. (原始內容存檔於2011-11-02).