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