美文网首页
JAR文件探秘

JAR文件探秘

作者: meieugene | 来源:发表于2019-10-07 22:06 被阅读0次

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文件可以包含厂商和版本等信息。
  • 可移植性,JAR文件可运行在任何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文档

相关文章

  • JAR文件探秘

    JAR文件是什么   JAR文件是基于ZIP压缩格式的文件格式,用于将JAVA class、META-INF和ja...

  • jar工具详解

    JAR 简介 JAR(Java Archive)文件格式能够将多个文件打包到单个归档文件中。通常,JAR 文件包含...

  • maven 打包项目总结

    1、查看 jar 的内容 解出内部jar包jar tf 外部jar包文件.jar ...

  • 总结Android studio引入jar、aar文件

    1、引入jar文件 第一种方式: 1)将jar文件添加到libs目录下; 2)选中jar文件,右键-add as ...

  • Android Studio 打包jar,aar

    1.Jar &Aar jar包与aar包的区别 jar是java字节码文件(class文件)的归档文件,其不包含a...

  • Android Studio快速导入jar和.so文件

    导入jar 将jar文件放在libs文件夹中,右键该jar,点击选项 add as library,点击确认,搞定...

  • Mac下生成Dex的Jar文件

    打包包含单个class文件的jar文件使用命令jar cvf output.jar origin.class注意:...

  • python读取脚本文件

    1.java程序打包为jar文件;2.生成一个.sh的文件,将java -jar xxx.jar文件作为内容;3....

  • Android 打包及引用 aar 文件的方法

    一、android中.aar文件与.jar文件简单介绍 .jar:只包含了class文件与清单文件,不包含资源文件...

  • Package&Jar

    Jar包 Jar(Java Archive)包是将class文件归档压缩之后所展现的文件形式.以.jar为后缀 P...

网友评论

      本文标题:JAR文件探秘

      本文链接:https://www.haomeiwen.com/subject/flbkyctx.html