JAR 文件是什么?
JAR 文件格式以流行的 Zip 文件格式為基礎(chǔ),用于將許多個(gè)文件聚集為一個(gè)文件。與 ZIP 文件不同的是,JAR 文件不僅用于壓縮和發(fā)布,而且還用于部署和封裝庫、組件和插件程序,并可被像編譯器和 JVM 這樣的工具直接使用。在 JAR 中包含非凡的文件,如 manifests 和部署描述符,用來指示工具如何處理特定的 JAR。
一個(gè) JAR 文件可以用于:
□ 用于發(fā)布和使用類庫
□ 作為應(yīng)用程序和擴(kuò)展的構(gòu)建單元
□ 作為組件、applet 或者插件程序的部署單位
□ 用于打包與組件相關(guān)聯(lián)的輔助資源
JAR 文件格式提供了許多優(yōu)勢和功能,其中很多是傳統(tǒng)的壓縮格式如 ZIP 或者 TAR 所沒有提供的。它們包括:
☆ 安全性。 可以對 JAR 文件內(nèi)容加上數(shù)字化簽名。這樣,能夠識別簽名的工具就可以有選擇地為您授予軟件安全特權(quán),這是其他文件做不到的,它還可以檢測代碼是否被篡改過。
☆ 減少下載時(shí)間。 假如一個(gè) applet 捆綁到一個(gè) JAR 文件中,那么瀏覽器就可以在一個(gè) HTTP 事務(wù)中下載這個(gè) applet 的類文件和相關(guān)的資源,而不是對每一個(gè)文件打開一個(gè)新連接。
☆ 壓縮。JAR 格式答應(yīng)您壓縮文件以提高存儲效率。
☆ 傳輸平臺擴(kuò)展。 java 擴(kuò)展框架(Java Extensions Framework)提供了向 Java 核心平臺添加功能的方法,這些擴(kuò)展是用 JAR 文件打包的(Java 3D 和 JavaMail 就是由 Sun 開發(fā)的擴(kuò)展例子)。
☆ 包密封。 存儲在 JAR 文件中的包可以選擇進(jìn)行密封,以增強(qiáng)版本一致性和安全性。密封一個(gè)包意味著包中的所有類都必須在同一 JAR 文件中找到。
☆ 包版本控制。 一個(gè) JAR 文件可以包含有關(guān)它所包含的文件的數(shù)據(jù),如廠商和版本信息。
☆ 可移植性。 處理 JAR 文件的機(jī)制是 Java 平臺核心 API 的標(biāo)準(zhǔn)部分。
壓縮的和未壓縮的 JAR
jar 工具在默認(rèn)情況下壓縮文件。未壓縮的 JAR 文件一般可以比壓縮過的 JAR 文件更快地裝載,因?yàn)樵谘b載過程中要解壓縮文件,但是未壓縮的文件在網(wǎng)絡(luò)上的下載時(shí)間可能更長。
META-INF 目錄
大多數(shù) JAR 文件包含一個(gè) META-INF 目錄,它用于存儲包和擴(kuò)展的配置數(shù)據(jù),如安全性和版本信息。Java 2 平臺識別并解釋 META-INF 目錄中的下述文件和目錄,以便配置應(yīng)用程序、擴(kuò)展和類裝載器:
☆ MANIFEST.MF。 這個(gè) manifest 文件定義了與擴(kuò)展和包相關(guān)的數(shù)據(jù)。
☆ INDEX.LIST。 這個(gè)文件由 jar 工具的新選項(xiàng) -i 生成,它包含在應(yīng)用程序或者擴(kuò)展中定義的包的位置信息。它是 JarIndex 實(shí)現(xiàn)的一部分,并由類裝載器用于加速類裝載過程。
☆ xxx.SF。 這是 JAR 文件的簽名文件。占位符 xxx 標(biāo)識了簽名者。
☆ xxx.DSA。 與簽名文件相關(guān)聯(lián)的簽名程序塊文件,它存儲了用于簽名 JAR 文件的公共簽名。
jar 工具
為了用 JAR 文件執(zhí)行基本的任務(wù),要使用作為Java Development Kit 的一部分提供的 Java Archive Tool (jar 工具)。用 jar 命令調(diào)用 jar 工具。表 1 顯示了一些常見的應(yīng)用:
表 1. 常見的 jar 工具用法 功能命令用一個(gè)單獨(dú)的文件創(chuàng)建一個(gè) JAR 文件jar cf jar-file input-file...用一個(gè)目錄創(chuàng)建一個(gè) JAR 文件jar cf jar-file dir-name創(chuàng)建一個(gè)未壓縮的 JAR 文件jar cf0 jar-file dir-name更新一個(gè) JAR 文件jar uf jar-file input-file...查看一個(gè) JAR 文件的內(nèi)容jar tf jar-file提取一個(gè) JAR 文件的內(nèi)容jar xf jar-file從一個(gè) JAR 文件中提取特定的文件jar xf jar-file archived-file...運(yùn)行一個(gè)打包為可執(zhí)行 JAR 文件的應(yīng)用程序java -jar app.jar
可執(zhí)行的 JAR
一個(gè)可執(zhí)行的 jar 文件是一個(gè)自包含的 Java 應(yīng)用程序,它存儲在非凡配置的JAR 文件中,可以由 JVM 直接執(zhí)行它而無需事先提取文件或者設(shè)置類路徑。要運(yùn)行存儲在非可執(zhí)行的 JAR 中的應(yīng)用程序,必須將它加入到您的類路徑中,并用名字調(diào)用應(yīng)用程序的主類。但是使用可執(zhí)行的 JAR 文件,我們可以不用提取它或者知道主要入口點(diǎn)就可以運(yùn)行一個(gè)應(yīng)用程序。可執(zhí)行 JAR 有助于方便發(fā)布和執(zhí)行 Java 應(yīng)用程序。
新聞熱點(diǎn)
疑難解答
圖片精選