META-INF的目的是什么?

2022-08-31 04:54:31

在Java中,您经常会看到一个包含一些元文件的META-INF文件夹。此文件夹的用途是什么,我可以放什么?


答案 1

官方的JAR文件规范(链接转到Java 7版本,但文本至少自v1.3以来没有变化):

META-INF 目录

META-INF 目录中的以下文件/目录由 Java 2 平台识别和解释,以配置应用程序、扩展、类装入器和服务:

  • MANIFEST.MF

用于定义扩展和包相关数据的清单文件。

  • INDEX.LIST

此文件由 jar 工具的新 “” 选项生成,该选项包含在应用程序或扩展中定义的包的位置信息。它是 JarIndex 实现的一部分,由类装入器用来加快其类装入过程。-i

  • x.SF

JAR 文件的签名文件。“x”代表基本文件名。

  • x.DSA

与具有相同基本文件名的签名文件关联的签名块文件。此文件存储相应签名文件的数字签名。

  • services/

此目录存储所有服务提供程序配置文件。

自 Java 9 实现 JEP 238 以来的新增功能是多版本 JAR。人们将看到一个子文件夹。这是一个允许在一个jar中打包用于不同Java版本的类的功能。versions


答案 2

一般来说,你不应该自己在META-INF中加入任何东西。相反,您应该依靠任何用于打包 JAR 的东西。这是我认为 Ant 真正擅长的领域之一:指定 JAR 文件清单属性。说这样的话很容易:

<jar ...>
    <manifest>
        <attribute name="Main-Class" value="MyApplication"/>
    </manifest>
</jar>

至少,我认为这很容易... :-)

关键是 META-INF 应该被视为内部 Java 目录。不要搞砸它!要包含在 JAR 中的任何文件都应放在其他某个子目录中或 JAR 本身的根目录中。


推荐