官方文档html
1. 简述
JAR表明Java ARchive。它是基于流行的ZIP文件格式的文件格式,用于将许多文件聚合为一个。尽管JAR能够用做通用归档工具,但其开发的主要动机是Java applet及其必需组件(.class文件,图像和声音)能够在单个HTTP事务中下载到浏览器,而不是打开每件做品的新链接。这大大提升了applet加载到网页上并开始运行的速度。JAR格式还支持压缩,这能够减少文件的大小并进一步缩短下载时间。此外,小程序做者能够对JAR文件中的各个条目进行数字签名,以验证其来源。java
2. 特色
- 惟一的跨平台归档格式
- 处理音频和图像文件以及类文件的惟一格式
- 向后兼容现有的applet代码
- 开放标准,彻底可扩展,用java编写
- 捆绑java applet的首选方法
3. META-INF目录
- MANIFEST.MF: 清单文件,用于定义扩展和包相关的数据。
- INDEX.LIST: 此文件由jar工具的新“ -i”选项生成,该选项包含应用程序或扩展中定义的包的位置信息。它是JarIndex实现的一部分,并由类加载器用于加速其类加载过程。
- x.SF: JAR文件的签名文件。'x'表明基本文件名。
- x.DSA: 与签名文件关联的签名块文件具备相同的基本文件名。该文件存储相应签名文件的数字签名。
- services/ : 此目录存储全部服务提供程序配置文件。
4. MANIFEST.MF
Manifest-Version: 1.0
Implementation-Title: web
Implementation-Version: 0.0.1
Built-By: catalpaflat
Start-Class: cn.catalpaflat.Application
Implementation-Vendor-Id: cn.catalpaflat
Spring-Boot-Version: 1.3.3.RELEASE
Created-By: Apache Maven 3.5.2
Build-Jdk: 1.8.0_161
Implementation-URL: https://platform.spring.io/platform/javaee-catalpaflat/web/
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.JarLauncher
复制代码
在上面的规范中,能够出如今主要部分中的属性被称为主要属性,而能够出如今各个部分中的属性被称为每一个条目属性。某些属性能够出如今主要部分和各个部分中,在这种状况下,每一个条目属性值将覆盖指定条目的主要属性值。两种类型的属性定义以下。web
4.1 Main Attributes
主要属性是清单主要部分中存在的属性。他们属于如下不一样的群体:算法
- 通常主要属性
- Manifest-Version:定义清单文件版本。该值是合法的版本号,如上面的规范中所述。
- Created-By:定义生成此清单文件的java实现的版本和供应商。该属性由jar工具生成。
- Signature-Version:定义jar文件的签名版本。该值应为有效的版本号 字符串。
- Class-Path:此属性的值指定此应用程序或扩展所需的扩展或库的相对URL。URL由一个或多个空格分隔。应用程序或扩展类加载器使用此属性的值来构造其内部搜索路径。
- 为独立应用程序定义的属性:此属性由捆绑到可执行jar文件的独立应用程序使用,可由java运行时直接经过运行“ java -jar x.jar ” 来调用。
- Main-Class:此属性的值是启动时启动程序将加载的主应用程序类的类名。该值不得将.class 扩展名附加到类名。
- 为扩展标识定义的属性:扩展使用此属性来定义其惟一标识。
- Extension-Name:此属性指定Jar文件中包含的扩展名。名称应该是惟一标识符,例如包含扩展名的主程序包的名称。
- 为扩展和包版本控制 和密封信息定义的属性:这些属性定义JAR文件所属的扩展的功能。这些属性的值适用于JAR文件中的全部包,但能够由每一个条目属性覆盖。
- Implementation-Title:值是一个字符串,用于定义扩展实现的标题。
- Implementation-Version:该值是一个字符串,用于定义扩展实现的版本。
- Implementation-Vendor:该值是一个字符串,用于定义维护扩展实现的组织。
- Implementation-Vendor-Id:不推荐使用:在未来的版本中可能会忽略此属性。 该值是一个字符串ID,它惟一地定义维护扩展实现的组织。
- Implementation-URL:不推荐使用:在未来的版本中可能会忽略此属性。 此属性定义可从中下载扩展实现的URL。
- Specification-Title:该值是一个字符串,用于定义扩展规范的标题。
- Specification-Version:该值是一个字符串,用于定义扩展规范的版本。
- Specification-Vendor - 供应商:该值是一个字符串,用于定义维护扩展规范的组织。
- Sealed:此属性定义此JAR文件是否已密封。值能够是“true”或“false”,忽略大小写。若是设置为“true”,则JAR文件中的全部包都默认为密封,除非它们是单独定义的。
4.2 Per-Entry Attributes
每一个条目属性仅适用于与清单条目关联的单个JAR文件条目。若是主要部分中也出现相同的属性,则per-entry属性的值将覆盖主要属性的值。例如,若是JAR文件a.jar具备如下清单内容spring
Manifest-Version: 1.0
Created-By: 1.2 (Sun Microsystems Inc.)
Sealed: true
Name: foo/bar/
Sealed: false
复制代码
这意味着在a.jar中存档的全部包都是密封的,除了包foo.bar不是。小程序
- 为文件内容定义的属性:
- Content-Type:此属性可用于为JAR文件中的特定文件条目指定MIME类型和数据子类型。该值应为type / subtype形式的字符串 。例如,“image / bmp”是具备bmp子类型(表示位图)的图像类型。这将指示文件条目做为图像,其中数据存储为位图。RFC 1521和1522讨论并定义了MIME类型定义。
- 为包版本控制和密封信息定义的属性:这些属性是上面定义的相同属性集,用于定义扩展包版本控制和密封信息的主要属性。当用做每一个条目属性时,这些属性会覆盖主要属性,但仅适用于清单条目指定的单个文件。
- 为bean对象定义的属性:
- Java-Bean:定义特定的jar文件条目是不是Java Beans对象。该值应为“true”或“false”,大小写将被忽略。
- 为签名定义的属性:这些属性用于签名和验证目的。更多细节在这里。
- x-Digest-y:此属性的名称指定用于计算相应jar文件条目的摘要值的摘要算法的名称。此属性的值存储实际摘要值。前缀“x”指定算法名称,可选后缀“y”指示应该针对哪一种语言验证摘要值。
- Magic:这是一个可选属性,应用程序可使用它来指示验证程序应如何计算清单条目中包含的摘要值。此属性的值是一组逗号分隔的上下文特定字符串。详细说明以下。
4.2.1 Signed JAR File
可使用命令行jarsigner工具或直接经过java.securityAPI 对JAR文件进行签名。META-INF若是JAR文件由jarsigner工具签名,则将对每一个文件条目(包括目录中的非签名相关文件) 进行签名。签名相关文件是:浏览器
META-INF/MANIFEST.MF
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
META-INF/SIG-*
复制代码