Java jar檔案


JAR檔案格式

JAR(Java Archive)是基於ZIP檔案格式的檔案格式。

它用於捆綁Java應用程式或小程式的資源,類檔案,聲音檔案,影象等。 它還提供資料壓縮。一個JAR檔案作為一種特殊型別的ZIP檔案。可以對JAR檔案的內容進行數位簽名,以提供安全性。 它提供了一個平台無關的檔案格式。

可以使用JAR API在Java程式中處理JAR檔案。JAR檔案可以具有可選的META-INF目錄,以包含包含應用程式組態資訊的檔案和目錄。

META-INF目錄

下表列出了META-INF目錄中的條目。

名稱 型別 目的
MANIFEST.MF 檔案 它包含擴充套件和包相關資料。
INDEX.LIST 檔案 它包含軟體包的位置資訊。 類載入器使用它來加快類搜尋和載入過程。
X.SF 檔案 X是基本檔案名。 它儲存jar檔案的簽名。
X.DSA 檔案 X是基本檔案名。 它儲存相應簽名檔案的數位簽名。
/services 目錄 此目錄包含所有服務提供程式組態檔案。

Jar工具

JDK提供了一個jar工具來建立和操作JAR檔案。還可以使用java.util.jar包中的類使用Java API建立和操作JAR檔案。

JAR API有一些新類來處理清單檔案。Manifest類表示清單檔案。要使用jar工具建立JAR檔案,許多命令列選項都可用。
以下程式碼列出了jar工具的命令列選項。

選項 描述
-c 建立一個新的JAR檔案。
-u 更新現有的JAR檔案。
-x 從JAR檔案中提取命名檔案或所有檔案。
-t 列出JAR檔案的目錄。
-f 指定JAR檔案名。
-m 包括來自指定檔案的清單資訊。
-M 不要建立清單檔案。
-i 為指定的JAR檔案生成索引資訊。它在JAR檔案中的META-INF目錄下建立一個INDEX.LIST檔案。
-0 不要壓縮JAR檔案中的條目。 只儲存它們,選項值為零,表示零壓縮。
-e 將指定的類名新增為清單檔案主要部分中Main-Class條目的值。
-v 在標準輸出上生成詳細輸出
-C 切換到指定的目錄並在JAR檔案中包括以下檔案。 請注意,該選項為大寫(C)。 小寫字母(c)用於指示建立JAR檔案選項。

建立JAR檔案

使用以下命令建立一個帶有兩個名為A.classB.class類的JAR型別檔案的test.jar

jar cf test.jar  A.class B.class

在上面的命令中,選項c表示建立一個新的JAR檔案,選項f表示指定一個JAR檔案名,這裡是:test.jar

在命令結束時,可以指定要包括在JAR檔案中的一個或多個檔案名或目錄名。要檢視test.jar檔案的內容,請執行以下命令:

jar tf test.jar

選項t表示對JAR檔案的目錄感興趣。選項f表示指定了JAR檔案名,在這個範例中是test.jar
上述命令將生成以下輸出:

META-INF/
META-INF/MANIFEST.MF A.class
B.class

jar命令自動在META-INF目錄中建立了兩個額外的東西:一個名為META-INF的目錄和一個名為MANIFEST.MF的檔案。

以下命令將通過在當前工作目錄中包含所有內容來建立test.jar檔案。

jar cf test.jar  *

以下命令將建立一個JAR檔案,其中包含book/archives目錄中的所有類檔案以及book/images目錄中的所有圖片。

jar cf test.jar  book/archives/*.class  book/images

可以在建立JAR檔案時使用命令列選項指定清單檔案。Manifest檔案是一個文字檔案,其中包含JAR檔案的所有列表條目。
Manifest檔案必須在檔案末尾有一個空行。 否則,將不處理列表檔案中的最後一個條目。

以下命令將在建立test.jar檔案(包括當前目錄中的所有檔案和子目錄)時使用manifest.txt檔案。

上述命令中使用的選項的順序很重要。 f出現在m之前,必須在Manifest檔案名manifest.txt之前指定JAR檔案名test.jar

可以按如下方式重寫上述命令:

jar cmf manifest.txt test.jar *

更新JAR檔案

使用選項u更新現有的JAR檔案條目或其Manifest檔案。以下命令將向現有的test.jar檔案新增一個C.class檔案:

jar uf  test.jar  C.class

假設有一個test.jar檔案,並且要將它的Manifest檔案中的Main-Class條目更改為HelloWorld類。可以使用以下命令:

jar ufe  test.jar HelloWorld

在此命令中,選項u表示正在更新JAR檔案; 選項f指示指定JAR檔案名,即test.jar,選項e表示在test.jar檔案中為MANIFEST.MF檔案指定Main-Class條目的值為HelloWorld

索引JAR檔案

可以為JAR檔案生成一個索引檔案。 它用於加快類載入。在建立JAR檔案後,必須在單獨的命令中使用選項ijar命令。

jar i test.jar

此命令將向test.jar檔案新增一個META-INF/INDEX.LIST檔案。可以通過使用以下命令列出test.jar檔案的目錄來驗證它:

jar tf test.jar

提取JAR檔案

要從JAR檔案中提取所有或部分條目,請使用選項xjar命令。從test.jar檔案中提取所有條目如下 -

jar xf  test.jar

選項x是從JAR檔案中提取條目。選項f指定檔案名,在這個範例中它是test.jar
上述命令將從當前工作目錄中的test.jar檔案中提取所有條目。它將建立與test.jar檔案中存在的相同的目錄結構。要從JAR檔案中提取單個條目,請在命令結尾處列出它們。 條目應該用空格分隔。

以下命令將從test.jar檔案中提取A.classbook/HelloWorld.class條目:

jar xf  test.jar A.class  book/HelloWorld.class

要從book目錄中提取所有類檔案,可以使用以下命令:

jar xf  test.jar  book/*.class

列表JAR檔案內容

使用選項tjar命令來列出標準輸出上的JAR檔案的目錄。

jar tf test.jar