JAR文件探秘

JAR文件是什么

  JAR文件是基于ZIP压缩格式的文件格式,用于将JAVA class、META-INF和jar lib等文件压缩为一个JAR文件。与ZIP文件不同的是,JAR文件不仅用于压缩和发布,还用于部署和封装库、组件和插件程序,并且可以被JVM直接使用。
  JAR文件可以通过命令行jar工具创建(jar cvf),也可以使用java.util.jarJava平台中的API创建。JAR文件的名称没有限制。

JAR文件使用场景
  • 用于发布和使用类库;
  • 用于程序的扩展部分;
  • 作为程序辅助资源的存在。
JAR文件格式的优势
  • 安全性,可以对JAR文件内的内容进行数字化签名。
  • 压缩,JAR格式提供压缩可提高存储效率。
  • 包装密封,可以选择密封 JAR文件中的包,可以在版本中强制实现一致性。
  • 包版本控制,JAR文件可以包含厂商和版本等信息。
  • 可移植性,JAT文件可运行在任何JVM环境。

META-INF目录

  JAR文件包含一个META-INF目录,用于存储包和扩展的配置数据,如安全性和版本信息。
  关于META-INF目录中的文件/目录、配置应用程序、类加载器和服务,Java 2平台有这样的解释:

  • MANIFEST.MF:清单文件用于定义扩展和包相关的数据,也是JAR文件运行时解析的核心文件。
  • INDEX.LIST:此文件由jar工具的新选项-i生成,该选项包含应用程序中定义的包的位置信息。它是JarIndex实现的一部分,并由类加载器用于加速其类加载过程。
  • x.SF,JAR文件的签名文件。x代表基本文件名。
  • x.DSA,与签名文件关联的签名块文件,该文件存储相应签名文件的数字签名
  • services/:此目录存储部署在类路径上JAR文件所有服务提供者的配置文件,或部署模块路径上的自动模块的JAR文件。
  • versions/:该目录下面包含多版本 JAR的版本化类和资源文件,配合MANIFEST.MF文件Multi-Release属性使用。

JAR MANIFEST

  MANIFEST.MF定义扩展和包相关数据,解压JAR文件其中META-INF目录下第一个文件就是MANIFEST.MF,下面分别列举出MANIFEST.MF文件中的各个属性。

一般属性
  • Manifest-Version:定义MANIFEST.MF文件版本。
  • Created-By:定义生成此MANIFEST.MF文件的生成者,该值由jar工具生成。
  • Signature-Version:定义JAR文件的签名版本。
  • Class-Path:该属性指定该程序所需库的相对URL,即JAR包的依赖关系,class loader会依据这个路径来搜索class。
  • Automatic-Module-Name:java9模块特性后增加属性,如果此JAR文件为java模块,则定义模块名称。
  • Multi-Release:java9支持multi-release jar的功能,包括jar、javac、javap、jdeps等命令都能支持这个特性。所谓multi-release jar可以包含多个jdk版本的实现,在运行时JVM根据当前环境加载符合版本的class,这样可以使得jar包在兼容旧版本的同时尽可能早地尝试新版JDK的特性。如果值为true,表示启用多版本特性。
应用程序相关属性
  • Main-Class:指定当前JAR文件的入口类,该类必须为可执行类。定义了该属性即可通过 java -jar x.jar来运行该jar文件。
  • Launcher-Agent-Class:如果存在此属性,则会在调用应用程序main方法之前启动的java代理的类名。
包版本控制和密封信息定义的属性

  这些属性的值适用于JAR文件中的所有包。

  • Implementation-Title:值是一个字符串,用于定义扩展实现的标题。
  • Implementation-Version:该值是一个字符串,用于定义扩展实现的版本。
  • Implementation-Vendor:该值是一个字符串,用于定义维护扩展实现的组织。
  • Specification-Title:该值是一个字符串,用于定义扩展规范的标题。
  • Specification-Version:该值是一个字符串,用于定义扩展规范的版本。
  • Specification-Vendor:该值是一个字符串,用于定义维护扩展规范的组织。
  • Sealed:此属性定义此JAR文件是否已密封。值可以是true或false,忽略大小写。如果设置为true,则JAR文件中的所有包都默认为密封,且可以对每个包进行单独定义。

oracle文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐只乐之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值