当您使用 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 Web 应用程序示例:
TheWebApp.war/
WEB-INF/
lib/
classes/
META-INF/
web.xml
...
blah.jsp
...etc/
与WEB-INF/classes/META-INF/
!最重要的是,我没有看到任何提及 GAE 项目和MANIFEST.MF
目录,我总是看到它们被打包在 META-INF
下。现在我真的很困惑。
所以我想我首先需要确认/澄清META-INF
和WEB-INF
的作用,然后了解它们如何在任何 Web 应用程序的 WAR 中一起使用,然后了解 GAE 在其 WAR 结构上放置的任何特性(如果存在)。
注意:我不打算使用Maven,并且至少在接下来的6-12个月内不打算使用(我现在没有时间学习它)。因此,如果这些问题的任何答案取决于您是否使用基于 Maven 的 buld,我更喜欢非 Maven 的答案,因为我使用的是 Ant/Ivy。
所以我问:
- 对于实用程序(库)JAR、可执行 JAR 和 WAR,
META-INF
目录的正常内容是什么?对于 WAR(GAE 和非 GAE)是否需要MANIFEST.MF
,为什么或为什么不? - 我应该在哪里放置非 Web 资源,以便它们可用于运行时类路径?例如,假设我有
environment.properties
或myapp-custom-resource-config.xml
...我把这些放在哪里?在WEB-INF/
、WEB-INF/classes
、WEB-INF/classes/META-INF
?别处? - GAE 项目的
WEB-INF
和META-INF
目录的正确内容是什么,正确的打包方法是什么?
提前谢谢。
目录一样,根级/META-INF 目录包含应用程序清单文件。它还可以包含特定 Web 容器或应用程序服务器的资源。例如,Apache Tomcat 在此目录中查找并使用上下文.xml文件来帮助自定义应用程序在 Tomcat 中的部署方式。
与 JAR 文件不同,根级/META-INF 目录不在应用程序类路径上。不能使用类装入器来获取此目录中的资源。但是,/WEB-INF/classes/META-INF 位于类路径上。您可以将所需的任何应用程序资源放在此目录中,并且可以通过类加载器访问它们。