有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么有些资源文件放在METAINF目录下

我想知道为什么一些资源文件被放在JAR的META-INF目录下?我总是把资源像考试一样。根目录下的属性。把它们放在META-INF中有什么好处吗


共 (3) 个答案

  1. # 1 楼答案

    这只是一个惯例,有些(大多数?)第三方JAR用于查找您提供的文件。对于您自己的类和文件,您可以选择将它们放在您喜欢的地方

  2. # 2 楼答案

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

    标准JavaSEAPI提供的一个示例是^{}。其中,JDBC4.0兼容驱动程序实现了这一点。这样,只要删除JDBC驱动程序JAR文件夹,就可以在Java应用程序启动/初始化期间自动加载驱动程序类,而无需在代码中使用任何手动Class.forName("com.example.Driver")

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

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

  3. # 3 楼答案

    在Servlet3.0中,某些静态资源可以通过web上下文获得,例如。css、java脚本和。png文件,因此不再需要使用ServletContext getResource()和getResourceAsStream()。有关更多信息,请查看web片段。xml(https://blogs.oracle.com/swchan/entry/servlet_3_0_web_fragment),这是一种涵盖此主题的资源

    就我个人而言,我更喜欢按照Maven喜欢的方式构造项目,使用src/main/resources目录作为应用程序类路径的一部分