JAR(Java Archive)是基於ZIP檔案格式的檔案格式。
它用於捆綁Java應用程式或小程式的資源,類檔案,聲音檔案,影象等。 它還提供資料壓縮。一個JAR檔案作為一種特殊型別的ZIP檔案。可以對JAR檔案的內容進行數位簽名,以提供安全性。 它提供了一個平台無關的檔案格式。
可以使用JAR API在Java程式中處理JAR檔案。JAR檔案可以具有可選的META-INF
目錄,以包含包含應用程式組態資訊的檔案和目錄。
下表列出了META-INF
目錄中的條目。
名稱 | 型別 | 目的 |
---|---|---|
MANIFEST.MF | 檔案 | 它包含擴充套件和包相關資料。 |
INDEX.LIST | 檔案 | 它包含軟體包的位置資訊。 類載入器使用它來加快類搜尋和載入過程。 |
X.SF | 檔案 | X是基本檔案名。 它儲存jar檔案的簽名。 |
X.DSA | 檔案 | X是基本檔案名。 它儲存相應簽名檔案的數位簽名。 |
/services | 目錄 | 此目錄包含所有服務提供程式組態檔案。 |
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檔案選項。 |
使用以下命令建立一個帶有兩個名為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 *
使用選項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檔案後,必須在單獨的命令中使用選項i
和jar
命令。
jar i test.jar
此命令將向test.jar
檔案新增一個META-INF/INDEX.LIST
檔案。可以通過使用以下命令列出test.jar
檔案的目錄來驗證它:
jar tf test.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
使用選項t
與jar
命令來列出標準輸出上的JAR檔案的目錄。
jar tf test.jar