项目文件夹结构设置 - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

项目文件夹结构设置

要在部署到 Tomcat 服务器时正常工作,必须根据某些准则为编译的 Java Platform Enterprise Edition (Java EE) Web 应用程序存档(WAR 文件)设置正确的结构。项目目录不一定要遵循同样的标准,但为了简化编译和打包操作,最好采用同样的方式设置结构。如同 WAR 文件内容一样设置项目文件夹的结构,还有助您了解文件的关联方式以及它们在 Web 服务器上的行为方式。

在以下推荐使用的层次结构中,Web 应用程序的源代码置于 src 目录中,与生成脚本和它生成的 WAR 文件隔离。

~/workspace/my-app/ |-- build.sh - Build script that compiles classes and creates a WAR |-- README.MD - Readme file with information about your project, notes |-- ROOT.war - Source bundle artifact created by build.sh `-- src - Source code folder |-- WEB-INF - Folder for private supporting files | |-- classes - Compiled classes | |-- lib - JAR libraries | |-- tags - Tag files | |-- tlds - Tag Library Descriptor files | `-- web.xml - Deployment Descriptor |-- com - Uncompiled classes |-- css - Style sheets |-- images - Image files |-- js - JavaScript files `-- default.jsp - JSP (JavaServer Pages) webpage

src 文件夹内容与将进行打包并部署到服务器的内容匹配 (com 文件夹除外)。com 文件夹包含未编译的类 (.java 文件)。这些类需要编译并置于 WEB-INF/classes 目录中,以便可通过应用程序代码进行访问。

WEB-INF 目录包含未在 Web 服务器上公开提供的代码和配置。源目录根位置处的其他文件夹 (cssimagesjs) 在 Web 服务器上的对应路径中公开提供。

以下列示例与上面的项目目录相同,只是包含的文件和子目录更多。此示例项目包含简单的标签、模型和支持类以及一个用于 record 资源的 Java Server Page (JSP) 文件。它还包含一个用于引导的样式表和 JavaScript、一个默认 JSP 文件以及 404 错误对应的一个错误页面。

WEB-INF/lib 包含一个 Java 存档 (JAR) 文件,其中含有用于 PostgreSQL 的 Java 数据库连接 (JDBC) 驱动程序。WEB-INF/classes 为空,因为尚未编译类文件。

~/workspace/my-app/ |-- build.sh |-- README.MD |-- ROOT.war `-- src |-- WEB-INF | |-- classes | |-- lib | | `-- postgresql-9.4-1201.jdbc4.jar | |-- tags | | `-- header.tag | |-- tlds | | `-- records.tld | `-- web.xml |-- com | `-- myapp | |-- model | | `-- Record.java | `-- web | `-- ListRecords.java |-- css | |-- bootstrap.min.css | `-- myapp.css |-- images | `-- myapp.png |-- js | `-- bootstrap.min.js |-- 404.jsp |-- default.jsp `-- records.jsp

使用 Shell 脚本生成 WAR 文件

build.sh 是非常简单的 shell 脚本,它用于编译 Java 类、构造 WAR 文件并将该文件复制到 Tomcat webapps 目录以进行本地测试。

cd src javac -d WEB-INF/classes com/myapp/model/Record.java javac -classpath WEB-INF/lib/*:WEB-INF/classes -d WEB-INF/classes com/myapp/model/Record.java javac -classpath WEB-INF/lib/*:WEB-INF/classes -d WEB-INF/classes com/myapp/web/ListRecords.java jar -cvf ROOT.war *.jsp images css js WEB-INF cp ROOT.war /Library/Tomcat/webapps mv ROOT.war ../

在 WAR 文件中,将发现与上面示例中的 src 目录相同的结构 (不包括 src/com 文件夹)。jar 命令自动创建 META-INF/MANIFEST.MF 文件。

~/workspace/my-app/ROOT.war |-- META-INF | `-- MANIFEST.MF |-- WEB-INF | |-- classes | | `-- com | | `-- myapp | | |-- model | | | `-- Records.class | | `-- web | | `-- ListRecords.class | |-- lib | | `-- postgresql-9.4-1201.jdbc4.jar | |-- tags | | `-- header.tag | |-- tlds | | `-- records.tld | `-- web.xml |-- css | |-- bootstrap.min.css | `-- myapp.css |-- images | `-- myapp.png |-- js | `-- bootstrap.min.js |-- 404.jsp |-- default.jsp `-- records.jsp

使用 .gitignore

要避免将已编译的类文件和 WAR 文件提交到 Git 存储库,或避免在运行 Git 命令时显示有关这些文件的消息,请将相关文件类型添加到项目文件夹内一个名为 .gitignore 的文件中。

~/workspace/myapp/.gitignore

*.zip *.class