Java Jar文件

2018-02-05 17:17 更新

Java IO教程 - Java Jar文件

JAR文件格式

JAR(Java Archive)是基于ZIP文件格式的文件格式。

它用于捆綁Java應(yīng)用程序或小程序的資源,類文件,聲音文件,圖像等。它還提供數(shù)據(jù)壓縮。

一個(gè)JAR文件作為一種特殊類型的ZIP文件。您可以對(duì)JAR文件的內(nèi)容進(jìn)行數(shù)字簽名,以提供安全性。它提供了一個(gè)平臺(tái)無關(guān)的文件格式。

您可以使用JAR API在Java程序中處理JAR文件。

JAR文件可以具有可選的META-INF目錄,以包含包含應(yīng)用程序配置信息的文件和目錄。

META-INF目錄

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

名稱類型目的
MANIFEST.MFFile它包含擴(kuò)展和包相關(guān)數(shù)據(jù)。
INDEX.LISTFile它包含軟件包的位置信息。類加載器使用它來加快類搜索和加載過程。
X.SFFileX是基本文件名。它存儲(chǔ)jar文件的簽名。
X.DSAFileX是基本文件名。它存儲(chǔ)相應(yīng)簽名文件的數(shù)字簽名。
/servicesDirectory此目錄包含所有服務(wù)提供程序配置文件。
   

JAR工具

JDK提供了一個(gè)jar工具來創(chuàng)建和操作JAR文件。您還可以使用java.util.jar包中的類使用Java API創(chuàng)建和操作JAR文件。

JAR API有一些新類來處理清單文件。 Manifest類表示清單文件。

要使用jar工具創(chuàng)建JAR文件,許多命令行選項(xiàng)都可用。

以下代碼列出了jar工具的命令行選項(xiàng)。

選項(xiàng)描述
-c創(chuàng)建一個(gè)新的JAR文件。
-u更新現(xiàn)有的JAR文件。
-x從JAR文件中提取命名文件或所有文件。
-t列出JAR文件的目錄。
-f指定JAR文件名。
-m包括來自指定文件的清單信息。
-M不要?jiǎng)?chuàng)建清單文件。
-i為指定的JAR文件生成索引信息。它在JAR文件中的META-INF目錄下創(chuàng)建一個(gè)INDEX.LIST文件。
-0不要壓縮JAR文件中的條目。只存儲(chǔ)它們。選項(xiàng)值為零,表示零壓縮。
-e將指定的類名添加為清單文件主要部分中Main-Class條目的值。
-v在標(biāo)準(zhǔn)輸出上生成詳細(xì)輸出
-C切換到指定的目錄并在JAR文件中包括以下文件。請(qǐng)注意,該選項(xiàng)為大寫(C)。小寫字母(c)用于指示創(chuàng)建JAR文件選項(xiàng)。

創(chuàng)建JAR文件

使用以下命令創(chuàng)建一個(gè)帶有兩個(gè)類文件(名為A.class和B.class)的test.jar JAR文件:

jar cf test.jar  A.class B.class

在上面的命令中,選項(xiàng)c表示我們正在創(chuàng)建一個(gè)新的JAR文件,選項(xiàng)f表示我們正在指定一個(gè)JAR文件名,它是test.jar。

在命令結(jié)束時(shí),我們可以指定要包括在JAR文件中的一個(gè)或多個(gè)文件名或目錄名。

要查看test.jar文件的內(nèi)容,請(qǐng)執(zhí)行以下命令:

jar tf test.jar

選項(xiàng)t表示我們對(duì)JAR文件的目錄感興趣。

選項(xiàng)f表示我們指定了JAR文件名,在這種情況下是test.jar。

上述命令將生成以下輸出:

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

jar 命令自動(dòng)為您創(chuàng)建了兩個(gè)額外的東西:一個(gè)名為META-INF的目錄和一個(gè)名為MANIFEST.MF的文件在META-INF目錄中。

以下命令將通過在當(dāng)前工作目錄中包含所有內(nèi)容來創(chuàng)建test.jar文件。

jar cf test.jar  *

以下命令將創(chuàng)建一個(gè)JAR文件,其中包含book / archives目錄中的所有類文件以及book / images目錄中的所有圖像。

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

我們可以在創(chuàng)建JAR文件時(shí)使用命令行選項(xiàng)指定清單文件。

清單文件是一個(gè)文本文件,其中包含您的JAR文件的所有清單條目。

清單文件必須在文件末尾有一個(gè)空行。否則,將不處理清單文件中的最后一個(gè)條目。

以下命令將在創(chuàng)建test.jar文件(包括當(dāng)前目錄中的所有文件和子目錄)時(shí)使用manifest.txt文件。

jar cfm test.jar manifest.txt *

上述命令中使用的選項(xiàng)的順序很重要。 f出現(xiàn)在m之前,我們必須在清單文件名manifest.txt之前指定JAR文件名test.jar。

您可以重寫以上命令,如下所示:

jar cmf manifest.txt test.jar *

更新JAR文件

使用選項(xiàng)u更新現(xiàn)有的JAR文件條目或其清單文件。

以下命令將向現(xiàn)有的test.jar文件添加一個(gè)C.class文件:

jar uf  test.jar  C.class

假設(shè)我們有一個(gè)test.jar文件,并且我們要將它的清單文件中的Main-Class條目更改為HelloWorld類。您可以使用以下命令:

jar ufe  test.jar HelloWorld

在此命令中,選項(xiàng)u表示我們正在更新JAR文件;選項(xiàng)f指示我們指定JAR文件名,即test.jar,選項(xiàng)e表示我們?cè)趖est.jar文件中為MANIFEST.MF文件指定Main-Class條目的值為HelloWorld。

索引JAR文件

我們可以為JAR文件生成一個(gè)索引文件。它用于加快類加載。

在創(chuàng)建JAR文件后,必須在單獨(dú)的命令中使用選項(xiàng)i和jar命令。

jar i test.jar

此命令將向test.jar文件添加一個(gè)META-INF / INDEX.LIST文件。我們可以通過使用以下命令列出test.jar文件的目錄來驗(yàn)證它:

jar tf test.jar

提取JAR文件

要從JAR文件中提取所有或部分條目,請(qǐng)使用選項(xiàng)x與jar命令。

從test.jar文件中提取所有條目

jar xf  test.jar

選項(xiàng)x從JAR文件中提取條目。

選項(xiàng)f指定文件名,它是test.jar。

上述命令將從當(dāng)前工作目錄中的test.jar文件中提取所有條目。

它將創(chuàng)建與test.jar文件中存在的相同的目錄結(jié)構(gòu)。

要從JAR文件中提取單個(gè)條目,請(qǐng)?jiān)诿罱Y(jié)尾處列出它們。條目應(yīng)該用空格分隔。

以下命令將從test.jar文件中提取A.class和book / HelloWorld.class條目:

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

要從書目錄中提取所有類文件,可以使用以下命令:

jar xf  test.jar  book/*.class

列表JAR文件內(nèi)容

使用選項(xiàng)t與jar命令來列出標(biāo)準(zhǔn)輸出上的JAR文件的目錄。

jar tf test.jar
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)