大多數 Java 程序員都熟悉對 JAR 文件的基本操作。但是只有少數程序員了解 JAR 文件格式的強大功能。在本文中,作者探討了 JAR 格式的許多功能和優勢,包括打包、可執行的 JAR 文件、安全性和索引。 <!-- frame contents --> <!-- /frame contents -->
JAR 文件是什麼?
JAR 文件格式以流行的 ZIP 文件格式為基礎,用於將許多個文件聚集為一個文件。與 ZIP 文件不同的是,JAR 文件不僅用於壓縮和發布,而且還用於部署和封裝庫、組件和插件程序,並可被像編譯器和 JVM 這樣的工具直接使用。在 JAR 中包含非凡的文件,如 manifests 和部署描述符,用來指示工具如何處理特定的 JAR。
一個 JAR 文件可以用於:
JAR 文件格式提供了許多優勢和功能,其中很多是傳統的壓縮格式如 ZIP 或者 TAR 所沒有提供的。它們包括:
安全性。 可以對 JAR 文件內容加上數字化簽名。這樣,能夠識別簽名的工具就可以有選擇地為您授予軟件安全特權,這是其他文件做不到的,它還可以檢測代碼是否被篡改過。
減少下載時間。 假如一個 applet 捆綁到一個 JAR 文件中,那麼浏覽器就可以在一個 HTTP 事務中下載這個 applet 的類文件和相關的資源,而不是對每一個文件打開一個新連接。
壓縮。JAR 格式答應您壓縮文件以提高存儲效率。
傳輸平台擴展。 Java 擴展框架(Java Extensions Framework)提供了向 Java 核心平台添加功能的方法,這些擴展是用 JAR 文件打包的(Java 3D 和 JavaMail 就是由 Sun 開發的擴展例子)。
包密封。 存儲在 JAR 文件中的包可以選擇進行密封,以增強版本一致性和安全性。密封一個包意味著包中的所有類都必須在同一 JAR 文件中找到。
包版本控制。 一個 JAR 文件可以包含有關它所包含的文件的數據,如廠商和版本信息。
可移植性。 處理 JAR 文件的機制是 Java 平台核心 API 的標准部分。
壓縮的和未壓縮的 JAR
jar 工具(有關細節參閱 jar 工具)在默認情況下壓縮文件。未壓縮的 JAR 文件一般可以比壓縮過的 JAR 文件更快地裝載,因為在裝載過程中要解壓縮文件,但是未壓縮的文件在網絡上的下載時間可能更長。
META-INF 目錄
大多數 JAR 文件包含一個 META-INF 目錄,它用於存儲包和擴展的配置數據,如安全性和版本信息。Java 2 平台識別並解釋 META-INF 目錄中的下述文件和目錄,以便配置應用程序、擴展和類裝載器:
MANIFEST.MF。 這個 manifest 文件定義了與擴展和包相關的數據。
INDEX.LIST。 這個文件由 jar 工具的新選項 -i 生成,它包含在應用程序或者擴展中定義的包的位置信息。它是 JarIndex 實現的一部分,並由類裝載器用於加速類裝載過程。
xxx.SF。 這是 JAR 文件的簽名文件。占位符 xxx 標識了簽名者。