没有合适的资源?快使用搜索试试~ 我知道了~
JAVA JAR 文件规范详解
资源推荐
资源详情
资源评论
JAR 文件规范详解
介绍
JAR 文件是基于 ZIP 文件格式的一种文件格式,用来将许多文件整合成一个文件。一个 JAR
文件本质上是包含可选目录 META‐INF 的 zip 文件,可以通过命令行 jar 工具或者在 Java 平台
上使用 java.util.jar 中的 API 来创建。JAR 文件的命名没有严格的要求,可以是特定平台上的
任意合法文件名称。
在很多场景中,JAR 文件不仅仅用来对 javaclass 文件和资源文件进行归档,还被用来作应用
程序及其扩展的构建块。如果包含 META‐INF 目录,则是用来存储包信息和扩展配置数据,
配置数据包括安全信息,版本控制信息,扩展信息和服务信息等。
META‐INF 目录
在 Java 2 平台会识别和解释 META‐INF 目录下面的文件和目录,以配置应用程序、扩展、类
加载器和服务。
MANIFEST.MF 是用来定义扩展和包相关数据的清单文件。
INDEX.LIST 通过 jar 工具的‐i 选项来生成,它包含应用程序及其扩展程序中的包的位置信息,
同时它是 JarIndex 实现的一部分,类加载器使用它来提高类的加载速度。
**x.SF**是 JAR 文件的签名文件,x 表示基本文件名称。
**x.DSA**是于 x.SF 关联的签名块文件,它们有相同的基本文件名。此文件存储相应签名文
件的数字签名。
services/ 该目录存储所有服务提供程序配置文件。
名称‐值对和节
在我们深入每个配置文件的细节之前,需要定义一些格式约定。
在大部分场景中,包含在清单文件和签名文件中的信息表示为受 RFC822 标准启发的所谓的
“名称:值”对。“名称:值”对也被称为头和属性。名称‐值对组称为“节”,每一“节”通过
空行分离。
任何形式的二进制数据都表示为 base64。行的长度超过 72 字节的二进制数据需要延续。摘
要和签名就是二进制数据的例子。
实现应该最多支持 65535 字节的头值。
本文档中的所有规范使用相同的语法,其中终端符号以固定宽度字体显示,非终端符号以斜
体字体显示。
section:*header+newline
nonempty‐section:+header+newline
newline:CRLF|LF|CR(notfollowedbyLF)
header:name:value
name:alphanum*headerchar
value:SPACE*othercharnewline*continuation
continuation:SPACE*othercharnewline
alphanum:{A‐Z}|{a‐z}|{0‐9}
headerchar:alphanum
|‐|_
otherchar:anyUTF‐8characterexceptNUL,CRandLF
;Also:Topreventmanglingoffilessentviastraighte‐mail,no
;headerwillstartwiththefourletters"From".
JARManifest
01 概述
JAR 文件的清单由主节和拥有多个私有 JAR 文件条目的单独节列表,每行通过换行符分隔。
主节和单独节都遵循上面指定的节语法。它们都有自己特定的限制和规则。
主节包括包括 JAR 文件自身的安全和配置信息,以及此 JAR 文件所属应用程序及扩展。清单
文件同样定义了每个单独清单条目的主属性。每节中没有属性可以使用“Name”作为名称。
每一节通过空行结束。
单独节定义了 JAR 文件中包和文件的各种属性。不是所有在 JAR 文件中的文件都需要被作为
条目列在清单中,但是所有被签名的文件必须被列出。清单文件自身不需要被列出。每节必
须以名称“Name”的属性作为开始,并且值必须是该文件的的相对路径或者是应用存档外
部数据的绝对 URL。
如果相同条目有多个单独节,则这些单独节中的属性会被合并。如果不同节中的相同属性有
不同的值,则识别最后一个。
不理解的属性会被忽略。这些属性可能包含应用程序使用的实现特定信息。
02 清单文件规范
manifest‐file:main‐sectionnewline*individual‐section
main‐section:version‐infonewline*main‐attribute
version‐info:Manifest‐Version:version‐number
version‐number:digit+{.digit+}*
main‐attribute: (anylegitimatemainattribute)newline
individual‐section:Name:valuenewline*perentry‐attribute
perentry‐attribute:(anylegitimateperentryattribute)newline
newline:CR
LF|LF|CR(notfollowedbyLF)
digit:{0‐9}
03 主属性
主属性是清单中出现在主节中的属性。他们可以分为以下几类:
Manifest‐Version:定义清单版本。如上面规范所述,值是何方的版本号
Create‐By:定义生成此清单文件的 java 实现版本和供应商。该属性由 jar 工具
生成。
Signature‐Version:定义 jar 文件的签名版本。该值应该是一个有效的版本号字符串。
Class‐Path:此属性的值指定此应用程序或扩展所需的扩展名或依赖库的相对 url。
url 由一个或多个空格分隔。应用程序或扩展类加载器使用此属性的值来构造其内部搜索路
径。参见 Class‐Path 属性。
Main‐class:此属性的值是启动程序在启动时加载的主应用程序类的类名。该值不能将.class
扩展追加到类名。
Extension‐List:此属性指示 applet 需要的扩展。此属性中列出
的每个扩展都有一组附加属性,applet 使用这些属性来指定需要的扩展的版本和供应商。
<extension>‐Extension‐Name:此属性是扩展的唯一名称。Java 插件将
此属性的值与已安装扩展清单中的 extension‐name 属性进行比较,以确定是否安装了该扩
展。
<extension>‐Specification‐Version:该属性指定了 applet 所需的最小扩展规范版
本。Java 插件将比较此属性的值与已安装扩展的 Specification‐Version
属性,以确定该扩展是
否是最新的。
<extension>‐Implementation‐Version:这个属性指定了 applet 所需要的最小扩展
实现版本号。Java 插件将比较此属性的值与已安装扩展的实现版本属性,以查看是否需要下
载更近期的实现。
<extension>‐Implementation‐Vendor‐Id:如果 applet 需要来自特定厂商的实现,则
此属性可用于标识扩展实现的厂商。Java 插件将此属性的值与已安装扩展的
Implementation‐Vendor‐Id 属性进行比较。
<extension>‐Implementation‐URL:此属性指定一个 URL,如果尚未安装所需
的扩展版本,则可以使用该 URL 获取扩展的最新版本。
剩余11页未读,继续阅读
资源评论
howard19820501
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功