META-INF 的目的是什么?

新手上路,请多包涵

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

原文由 Kristian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

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

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

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

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

原文由 Daniel Spiewak 发布,翻译遵循 CC BY-SA 2.5 许可协议

官方 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题