科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件探讨JAR文件无限可能性

探讨JAR文件无限可能性

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

所有Java开发者都知道JAR文件只是包含Java类树的压缩(ZIP)文件。但是,不是人人(包括一些经验丰富的开发者)了解这种文件格式的其它优点。

作者:builder.com.cn 2007年1月10日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

JAR签名文件

任何JAR文件都可以通过java.security API,使用命令行jarsigner工具或目录进行签名。通过文件签名,你可以保证没人能够改变一个文件的内容,以及你正在使用一个知名厂商的JAR文件。如果JAR文件用jarsigner工具签名,那么每个文件,包括META-INF目录中的相关非签名文件,都将被签名。下面是与签名有关的文件:

  • META-INF/MANIFEST.MF
  • META-INF/*.SF
  • META-INF/*.DSA
  • META-INF/*.RSA
  • META-INF/SIG-*

每个签名器由一个扩展名为.SF的签名文件说明,这个文件的主要内容与清单文件相似。它由一个主要部分构成,其中包含由签名器提供的信息,但并不特别针对某个特定的JAR文件。主要部分的项目x-Digest-Manifest-Main-Attributes(这里的x是一个摘要算法)包含清单主要属性的摘要值。

要使一个文件生效,首先将签名文件的一个摘要值与根据清单文件中对应的项目计算的摘要进行比较;然后,再将清单文件中的一个摘要值与根据“Name:”属性中的实际引用数据计算的摘要比较。“Name:”属性指定一个相对文件路径或RUL。

例如,下面是一个签名JAR的清单文件:

Manifest-Version: 1.0

Created-By: 1.3 (Sun Microsystems, Inc)?br>

Name: common/class1.class

MD5-Digest: (base64 representation of MD5 digest)?br>

Name: common/class2.class

MD5-Digest: (base64 representation of MD5 digest)

SHA-Digest: (base64 representation of SHA digest)

下面是对应的签名:

Signature-Version: 1.0

MD5-Digest-Manifest-Main-Attributes: (base64 representation of MD5 digest)?br>

Name: common/class1.class

MD5-Digest: (base64 representation of MD5 digest)?br>

Name: common/class2.class

MD5-Digest: (base64 representation of MD5 digest)

数字签名是.SF签名文件的一个签名版本。这些是人类无法解译的二进制文件。数字签名文件和.SF文件的名称相同,但扩展名不同。数字签名的类型不同,其扩展名也各不相同,通常为RSA或DSA。

JAR目录

为优化类加载器在网络应用程序,特别是applet中的类搜索过程,因此引入了JAR目录(一般称作JarIndex机制)。JarIndex机制收集在一个applet中定义的所有JAR文件,并将信息存储在applet的类路径的第一个JAR文件的一个目录文件中。下载第一个JAR文件后,applet类加载器将收集内容信息,这样可提高JAR文件的下载效率。

系统对现有的JAR工具进行强化,使其能够检查一个JAR文件列表,并生成目录信息,说明哪些类和资源位于哪个JAR文件中。这些目录信息存储在根JAR文件META-INF目录中的一个名为INDEX.LIST的简单文本文件中。当类加载器加载根JAR文件时,它阅读INDEX.LIST文件,并用它建立一个由文件和数据包名称到JAR文件名列表的映射散列表。为了找到一个类或资源,类加载器查询散列表找到正确的JAR文件,如有必要,再下载这个文件。

提供服务

META-INF/services目录中的文件为服务提供程序配置文件。一个服务通常是一组著名的界面和(一般是抽象的)类。一个服务提供程序是一项服务的特殊执行过程。提供程序中的类往往执行上述界面并继承服务本身定义的类。

服务提供程序通过把一个提供程序配置文件放在META-INF/services源目录中来识别自己。这个文件名应由完全合格的抽象服务类名称构成。

应用这些特性

了解JAR文件的这些特性后,你就可以在实际开发工作中创造性的应用它们。如果你已经有了一些有趣的使用方法,请在文章的讨论部分分享你的经验。


Peter V. Mikhalenko是一名通过Sun认证的专家,现在任德意志银行商业顾问。 


责任编辑:德东

查看本文国际来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章