在 Java 中,您经常会看到一个包含一些元文件的 META-INF 文件夹。这个文件夹的用途是什么,我可以放什么?
原文由 Kristian 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Java 中,您经常会看到一个包含一些元文件的 META-INF 文件夹。这个文件夹的用途是什么,我可以放什么?
原文由 Kristian 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 官方 JAR 文件规范(链接转到 Java 7 版本,但文本至少从 v1.3 开始就没有改变):
META-INF 目录
META-INF 目录中的以下文件/目录被 Java 2 平台识别和解释以配置应用程序、扩展、类加载器和服务:
MANIFEST.MF
用于定义扩展和包相关数据的清单文件。
INDEX.LIST
此文件由 jar 工具的新“
-i
”选项生成,其中包含应用程序或扩展中定义的包的位置信息。它是 JarIndex 实现的一部分,被类加载器用来加速它们的类加载过程。
x.SF
JAR 文件的签名文件。 ‘x’ 代表基本文件名。
x.DSA
与具有相同基本文件名的签名文件关联的签名块文件。该文件存储对应签名文件的数字签名。
services/
该目录存放所有服务提供者的配置文件。
自 Java 9 实施 JEP 238 以来的新功能是多版本 JAR。人们会看到一个子文件夹 versions
。这是一项允许将适用于不同 Java 版本的类打包在一个 jar 中的功能。
原文由 aku 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
一般来说,您不应该自己将任何东西放入 META-INF。相反,您应该依赖于您用来打包 JAR 的任何内容。这是我认为 Ant 真正擅长的领域之一:指定 JAR 文件清单属性。说这样的话很容易:
至少,我认为这很容易… :-)
关键是 META-INF 应该被视为内部 Java 元 目录。别惹它!您想要包含在 JAR 中的任何文件都应该放在其他某个子目录中或 JAR 本身的根目录中。