META-INF的目的是什么?
在Java中,您经常会看到一个包含一些元文件的META-INF文件夹。此文件夹的用途是什么,我可以放什么?
在Java中,您经常会看到一个包含一些元文件的META-INF文件夹。此文件夹的用途是什么,我可以放什么?
从官方的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
一般来说,你不应该自己在META-INF中加入任何东西。相反,您应该依靠任何用于打包 JAR 的东西。这是我认为 Ant 真正擅长的领域之一:指定 JAR 文件清单属性。说这样的话很容易:
<jar ...>
<manifest>
<attribute name="Main-Class" value="MyApplication"/>
</manifest>
</jar>
至少,我认为这很容易... :-)
关键是 META-INF 应该被视为内部 Java 元目录。不要搞砸它!要包含在 JAR 中的任何文件都应放在其他某个子目录中或 JAR 本身的根目录中。