Google App Engine WEB-INF和META-INF

时间:2013-01-29 12:41:13

标签: java google-app-engine war web-inf meta-inf

使用Google-Eclipse插件创建新的 Web应用程序项目时,它会为您创建整个项目目录结构,包括:

src/
    META-INF/
        jdoconfig.xml
        persistence.xml
war/
    WEB-INF/
        lib/
        web.xml
        ...etc.

首先,我的理解META-INF/仅适用于实用程序JAR,而不适用于Web应用程序(WAR)。所以在项目中看到src/META-INF/*让我感到意外。但后来我看到了GAE网络应用程序的例子包装如下:

TheWebApp.war/
    WEB-INF/
        lib/
        classes/
            META-INF/
        web.xml
        ...
    blah.jsp
    ...etc/

WEB-INF/classes/META-INF/!除此之外,我没有看到GAE项目和MANIFEST.MF目录的任何提及,我总是看到在META-INF下打包使用的目录。现在我真的困惑。

所以我认为我首先需要确认/澄清META-INFWEB-INF的作用,然后了解它们如何在任何 web应用程序,然后了解GAE在其WAR结构上放置的任何特性(如果存在)。

注意:我没有使用Maven,并且至少在接下来的6-12个月内没有打算(我现在没有时间学习它)。因此,如果这些问题的任何答案取决于您是否使用基于Maven的buld,我更喜欢非Maven的答案,因为我正在使用Ant / Ivy。

所以我问:

  1. META-INF目录的正常内容是什么,实用程序(库)JAR,可执行JAR和WAR?对于WAR(GAE和非GAE)是必需的MANIFEST.MF,为什么或为什么不呢?
  2. 我应该在哪里放置非Web资源,以便它们可用于运行时类路径?例如,假设我有environment.propertiesmyapp-custom-resource-config.xml ...我在哪里放这些?在WEB-INF/WEB-INF/classesWEB-INF/classes/META-INF?在其他地方?
  3. GAE项目的WEB-INFMETA-INF目录的正确内容是什么,打包它们的正确方法是什么?
  4. 提前致谢。

1 个答案:

答案 0 :(得分:0)

与JAR文件META-INF目录一样,根级别/ META-INF目录包含应用程序清单文件。它还可以包含特定Web容器或应用程序服务器的资源。例如,Apache Tomcat在此目录中查找并使用context.xml文件来帮助自定义如何在Tomcat中部署应用程序。

与JAR文件不同,根级别/ META-INF目录不在应用程序类路径上。您不能使用ClassLoader获取此目录中的资源。然而,/ WEB-INF / classes / META-INF位于类路径上。您可以将所需的任何应用程序资源放在此目录中,并且可以通过ClassLoader访问它们。