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.class
和B.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文件後,必須在單獨的命令中使用選項i
和jar
命令。
jar i test.jar
此命令將向test.jar
文件添加一個META-INF/INDEX.LIST
文件。可以通過使用以下命令列出test.jar
文件的目錄來驗證它:
jar tf test.jar
提取JAR文件
要從JAR文件中提取所有或部分條目,請使用選項x
和jar
命令。從test.jar
文件中提取所有條目如下 -
jar xf test.jar
選項x
是從JAR文件中提取條目。選項f
指定文件名,在這個示例中它是test.jar
。
上述命令將從當前工作目錄中的test.jar
文件中提取所有條目。它將創建與test.jar
文件中存在的相同的目錄結構。要從JAR文件中提取單個條目,請在命令結尾處列出它們。 條目應該用空格分隔。
以下命令將從test.jar
文件中提取A.class
和book/HelloWorld.class
條目:
jar xf test.jar A.class book/HelloWorld.class
要從book
目錄中提取所有類文件,可以使用以下命令:
jar xf test.jar book/*.class
列表JAR文件內容
使用選項t
與jar
命令來列出標準輸出上的JAR文件的目錄。
jar tf test.jar