JAR (文件格式)

Java ARchive
KDE JAR文件图标
扩展名
.jar
互联网媒体类型
application/java-archive[1][2]
统一类型标识com.sun.java-archive
开发者網景昇陽電腦甲骨文公司
格式类型文件格式数据压缩
扩展自ZIP

软件领域,JAR文件(Java归档,英語:Java ARchive)是一种软件包文件格式,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便分发Java平台应用软件[3]

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]

参见

  • Java主题

参考文献

  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). 

外部链接

僅歸檔
  • ar
  • Cpio
  • shar英语shar
  • tar
  • LBR英语LBR (file format)
  • BagIt英语BagIt
  • WAD英语Doom WAD
僅壓縮
  • Bzip2
  • Gzip
  • lzip英语lzip
  • LZMA
  • lzop英语lzop
  • Xz
  • SQ英语SQ (program)
  • compress英语compress
歸檔並壓縮
  • 7z
  • ACE
  • ARC
  • ARJ
  • B1英语B1 (archive format)
  • Cabinet
  • cfs英语CFS (file format)
  • cpt英语Compact Pro
  • DGCA英语DGCA (computing)
  • .dmg
  • .egg英语EGG (file format)
  • kgb英语KGB Archiver
  • LHA
  • LZX
  • MPQ英语MPQ
  • PEA
  • RAR
  • rzip英语rzip
  • sit英语StuffIt
  • SQX英语SQX
  • UDA英语PAQ
  • Xar
  • zoo英语Zoo (file format)
  • ZIP
  • ZPAQ英语ZPAQ
軟體封裝和分发
文件封裝和分发
压缩软件
比较
自由软件
免費軟體
  • Filzip英语Filzip
  • IZArc
  • LHA
  • StuffIt Expander英语StuffIt Expander(仅解压)
  • TUGZip英语TUGZip
  • ZipGenius英语ZipGenius
  • 2345好压
  • 360压缩
  • Bandizip
商业软件
  • ARC
  • ALZip
  • Archive Utility英语Archive Utility
  • ARJ
  • BetterZip英语BetterZip
  • BulkZip英语BulkZip
  • JAR英语JAR (software)
  • MacBinary英语MacBinary
  • PKZIP/SecureZIP英语PKZIP
  • PowerArchiver英语PowerArchiver
  • StuffIt英语StuffIt
  • WinAce
  • WinRAR
  • WinZip
非归档压缩
常规
  • bzip2
  • compress英语compress
  • gzip
  • lzip英语lzip
  • lzop英语lzop
  • pack英语pack (compression)
  • rzip英语rzip
  • Snappy
  • XZ Utils英语XZ Utils
面向代码
音频压缩
比较
有损
  • Fraunhofer FDK AAC英语Fraunhofer FDK AAC
  • Nero AAC Codec英语Nero AAC Codec
  • Freeware Advanced Audio Coder (FAAC)英语FAAC
  • Helix DNA Producer英语Helix (multimedia project)
  • l3enc英语l3enc
  • LAME
  • TooLAME英语TooLAME
  • Libavcodec
  • libcelt英语CELT
  • libopus
  • libspeex
  • Musepack
  • libvorbis
  • Windows Media Encoder英语Windows Media Encoder
无损
视频压缩
比较英语Comparison of video codecs
有损
MPEG-4 ASP英语MPEG-4 Part 2
H.264 /
MPEG-4 AVC
HEVC
其他
  • CineForm英语CineForm
  • Cinepak英语Cinepak
  • Daala
  • DNxHD英语DNxHD codec
  • Helix DNA Producer英语Helix (multimedia project)
  • Indeo英语Indeo
  • Libavcodec
  • Schrödinger (Dirac)英语Dirac (video compression format)
  • SBC英语Smart Bitrate Control
  • Sorenson英语Sorenson codec
  • On2 Technologies
  • libtheora
  • libvpx英语libvpx
  • Windows Media Encoder英语Windows Media Encoder
  • AOMedia Video 1
无损
  • FFV1英语FFV1
  • Huffyuv英语Huffyuv
  • Lagarith
  • MSU Lossless英语MSU Lossless Video Codec
  • YULS英语YULS
  • 另見:压缩方法、压缩格式