我想知道为什么有些资源文件放在JAR中的META-INF目录下?我总是将像 test.properties 这样的资源放在根目录下。将它们放入 META-INF 有什么好处吗?
许多 Java (EE) API 都有一个约定,即当您将特定的配置/元数据文件放入META-INF
如果您的(或第 3 方)JAR 文件夹中存在该文件夹,则 API 将自动执行特定于 API 的工作,例如扫描类、预加载特定类和/或根据元信息执行特定代码。
标准 Java SE API 提供的一个示例是ServiceLoader http://download.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html。其中,JDBC 4.0 兼容驱动程序实现了这一点。这样,只需删除 JDBC 驱动程序 JAR 文件夹即可在 Java 应用程序启动/初始化期间自动加载驱动程序类,无需任何手动操作Class.forName("com.example.Driver")
代码中的行。
此外,Java EE 6 还提供了 JSF 2.0 API,它会在应用程序启动期间扫描所有 JAR 文件以查找faces-config.xml
文件在META-INF
文件夹。如果存在,那么它将把它作为扫描整个 JAR 文件以查找实现 JSF 特定注释的类的提示,例如@ManagedBean http://download.oracle.com/javaee/6/api/javax/faces/bean/ManagedBean.html以便它们自动实例化和自动配置。这节省了扫描整个类路径中所有 JAR 中数千个类的潜在昂贵工作的时间。在这些 API 的旧版本中,配置通常是通过(详细的)XML 文件完成的。
总而言之,主要目标是将开发人员从代码和/或配置样板中解放出来。 JAR 的META-INF
文件夹用于配置文件/提示。一些 API 确实也将静态文件/资源放在那里供自己使用。这META-INF
文件夹也是类路径的一部分,因此类加载器加载这些文件很容易完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)