JAR (文件格式)

軟件領域,JAR文件(Java歸檔,英語:Java ARchive)是一種軟件包文件格式,通常用於聚合大量的Java類文件、相關的元數據和資源(文本、圖片等)文件到一個文件,以便分發Java平台應用軟件[3]

Java ARchive
KDE JAR文件圖標
副檔名
.jar
網路媒體型式
application/java-archive[1][2]
統一類型標識com.sun.java-archive
開發者網景昇陽電腦甲骨文公司
格式類型文件格式數據壓縮
延伸自ZIP

JAR文件是一種歸檔文件,以ZIP格式構建,以.jar文件擴展名。用戶可以使用JDK自帶的jar命令創建或提取JAR文件。也可以使用其他zip壓縮工具,不過壓縮時zip文件頭裡的條目順序很重要,因為Manifest文件常需放在首位。JAR文件內的文件名是Unicode文本。[4]

設計

編輯

一個JAR文件允許Java運行時高效地部署一組類和它們相關的資源。JAR文件中的元素可以被壓縮,這樣一來,在單個請求中下載整個應用程序,使得下載一個JAR文件比對構成一個Java應用的許多未壓縮的文件單獨下載更方便。包java.util.zip包含讀寫JAR文件的類。

JAR文件在路徑META-INF/MANIFEST.MF下有一個可選的Manifest文件。Manifest文件中的條目定義這個JAR文件如何被使用。例如,類路徑條目由其他JAR文件的絕對或相對路徑的列表組成,用於指定在加載本JAR文件時同時加載的其他JAR文件。雖然旨在簡化JAR的使用,但在實踐中證明Manifest文件是非常脆弱的,因為入口點JAR在創建時依賴於所有相關的JAR的確切位置。一旦需要更改版本或庫的位置,必需重建Manifest文件。

為了提取JAR文件的內容,用戶可以使用任何標準的unzip解壓縮軟件,或者每個Java虛擬機都帶有的jar命令:「jar -xf foo.jar」。

開發者可以對JAR文件進行數字簽名。在這種情況下,簽名信息成為嵌入的Manifest文件的一部分。JAR本身並沒有被簽名,而是歸檔內的每一個文件的校驗和連同其名字作為簽名,被記錄在Manifest文件中。多個實體可能簽署一個JAR文件,並在每次簽名時改變這個JAR文件,雖然簽署文件本身仍然有效。當Java運行時加載簽名的JAR文件時,它可以驗證簽名並拒絕加載簽名不匹配的類。Java運行時也支持「密封」的包(Sealed Packages)。類加載器一旦成功裝載密封包中的某個類後,其後加載的類必須是由同一實體簽名,才被允許加載到同一個包。這可以防止惡意代碼被插入到現有的軟件包,以至於接觸到包範圍內的類和數據。

開發者可以對JAR文件進行混淆,這樣該JAR文件的用戶無法得到關於該JAR文件所包含的代碼的太多信息,並且能夠壓縮文件大小。這在空間受限的嵌入式系統開發中很有用。

可執行JAR文件

編輯

一個可執行Java程序以及其使用的文件可以打包在一個JAR文件中。

可執行的JAR文件中的Manifest文件用代碼Main-Class: myPrograms.MyClass指定了入口點類,注意要指明該類的路徑(-cp參數將被忽略)。有些操作系統可以在點擊後直接運行可執行JAR文件。而更典型的調用則是通過命令行執行「java -jar foo.jar」。

在多數平台上可以使用封裝器封裝可執行JAR文件。例如,對於更喜歡使用Windows EXEMicrosoft Windows用戶而言,可以使用工具(如JSmooth英語JSmoothLaunch4J英語Launch4JWinRun4J英語WinRun4JNullsoft腳本安裝系統等),將單個JAR文件轉換為可執行文件。

Manifest

編輯

Java平台中, Manifest文件是JAR歸檔中所包含的特殊文件。[5][6]Manifest文件被用來定義擴展或檔案打包相關數據。Manifest文件是一個元數據文件,它包含了不同部分中的鍵-值對英語Attribute–value pair數據。如果一個JAR文件被當作可執行文件,則其中的Manifest文件需要指出該程序的主類文件。通常Manifest文件的文件名為MANIFEST.MF

通常Manifest文件都與Java檔案相關,其他的情況比較少見。

Apache Ant的Zip/JAR支持

編輯

Apache Ant構建工具中有其自己的包——org.apache.tools.zip,用來讀寫Zip和JAR歸檔文件,並包括對Unix文件系統的支持。org.apache.tools.zip包發布在Apache軟件基金會許可下,並被設計成在Ant之外使用。

相關格式

編輯

幾種相關的文件格式建立在JAR格式的基礎上:

  • WAR (Web應用程序歸檔,英語:Web application archive),也是一種Java歸檔,存儲XML文件、Java類、JSP和Web應用程序中的其他文件。
  • RAR(資源適配器歸檔,英語:Resource adapter archive),這裡不是指RAR文件格式),也是一種Java歸檔,存儲XML文件、Java類和Java EE連接器架構(JCA)應用中的其他文件。
  • EAR (文件格式)英語EAR (file format) (英語:Enterprise archive),是一種複合式Java歸檔文件,包含了XML文件、Java類和針對Java EE應用的其他Java歸檔文件,例如JAR、WAR和RAR。
  • SAR(英語:Service archive),與EAR類似。它提供了service.xml文件和相應的JAR文件。
  • APK (Android應用程序包文件,英語:Android application package)Java歸檔格式的一個變種,用於Android應用程序。[7]

參見

編輯

參考文獻

編輯
  1. ^ File Extension .JAR Details. [29 November 2012]. (原始內容存檔於2018-07-18). 
  2. ^ MIME : Java Glossary. [29 November 2012]. (原始內容存檔於2019-03-21). 
  3. ^ Java Archive (JAR) Files. [2014-05-10]. (原始內容存檔於2009-08-26). 
  4. ^ 存档副本. [2014-05-10]. (原始內容存檔於2013-01-08). 
  5. ^ Understanding the Manifest. Java.sun.com. 2003-03-21 [2012-07-31]. (原始內容存檔於2012-06-26). 
  6. ^ JAR File Specification. Download.oracle.com. [2012-07-31]. (原始內容存檔於2011-11-02). 
  7. ^ Android Developer's Guide. [2014-05-10]. (原始內容存檔於2017-11-10). 

外部連結

編輯