java - 为什么有些资源文件放在META-INF目录下

标签 java jar

我想知道为什么有些资源文件放在JAR中的META-INF目录下?我总是把 test.properties 之类的资源放在根目录下。将它们放在 META-INF 中有什么好处?

最佳答案

许多 Java (EE) API 都有一个约定,当您将特定配置/元数据文件放入您(或第 3 方)JAR 的 META-INF 文件夹中时,API 将自动执行特定于 API 的工作,例如扫描类、预加载特定类和/或基于元信息执行特定代码。

标准 Java SE API 提供的示例是 ServiceLoader .其中,JDBC 4.0 兼容驱动程序实现了这一点。这样,只需删除 JDBC 驱动程序 JAR 文件夹即可在 Java 应用程序启动/初始化期间自动加载驱动程序类,而无需在您的代码中手动添加任何 Class.forName("com.example.Driver") 行代码。

此外,还有 Java EE 6 提供的 JSF 2.0 API,它在应用程序启动期间扫描所有 JAR 文件以查找 META-INF 中的 faces-config.xml 文件文件夹。如果存在,它将作为提示扫描整个 JAR 文件以查找实现 JSF 特定注释的类,如 @ManagedBean。这样它们就可以自动实例化和自动配置。这可以节省扫描整个类路径中所有 JAR 中的数千个类的潜在昂贵工作的时间。在这些 API 的旧版本中,配置通常由(详细的)XML 文件完成。

总而言之,主要目标是将开发人员从代码和/或配置样板文件中解救出来。 JAR 的 META-INF 文件夹用于配置文件/提示。一些 API 确实也将静态文件/资源​​放在那里供自己使用。 META-INF 文件夹也是类路径的一部分,因此类加载器加载这些文件很容易。

关于java - 为什么有些资源文件放在META-INF目录下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5609272/

相关文章:

java - Clojure/Lein/打包到 jar 里

java - 如何使用Jsoup正确提取所需的信息?

java - 在 linux 中创建 jar 文件时如何包含外部 jar 文件?

java - 从mongoDB复制数据到hdfs时hadoop jar错误

java - 如何预加载整个jar文件

visual-c++ - 如何从 Visual C++ 调用 jar 文件中的方法?

java - 使用 jsp 检索函数返回的 java 输出

Java和系统用户认证

java - 在java类中执行多重检查的更优雅的方法?

jar - 智能 IDEA。生成 javadoc 作为 jar 存档