Maven + Spring 项目结构标准

3

实际上,我在使用Maven和Spring方面还很新,我很好奇我们如何规范项目结构。正如我们所知道的,如果我们第一次创建Maven项目,它只会给出以下结构:

project
   - pom.xml
   - src/
         - main/
               - java/
         - test/

java目录是我们放置Java代码的目录,我明白这一点。但是,当我们制作一个包含HTML、CSS或JavaScript等Web文件的Web应用程序时,我们需要另一个目录来放置它。

当我在Maven中使用Spring或Spring Boot时,它还创建了resources目录,也位于main目录下。因此,现在的目录结构看起来像这样:

project
   - pom.xml
   - src/
         - main/
               - java/
               - resources/
         - test/

在其他一些Maven Web项目示例中,我发现了不同的结构。它在main下面有一个webapp目录。在webapp内部还有WEB-INFMETA-INF目录,他们将网站文件(如HTML、CSS等)放置在这里。该项目的结构如下:

project
   - pom.xml
   - src/
         - main/
               - java/
               - resources/
               - webapp/
                     - WEB-INF/
                     - META-INF/
                           - pages/ *contains html pages
                     - static/ * contains css and javascript files for styling
     - test/

这就是我感到困惑的地方。我对此有一些问题。
  1. 我们怎么知道这是最佳结构呢?实际上,Maven 和 Spring 应用程序的最佳结构是什么?
  2. 如果结构像我给出的第三个例子,我们如何在调用资产文件时在应用程序中使用它?
  3. 在构建某些 Web 应用程序时,WEB-INF 和 META-INF 目录是否真的需要存在?
如果有人能给我一个清晰的解释,我将不胜感激。谢谢。
1个回答

0

实际上这取决于应用程序的类型。 例如,如果您想制作一个Spring-Boot应用程序的JAR文件,并且嵌入了Servlet容器,则不需要webapp目录。

因此,对于JAR的单个Maven项目的最佳结构是:

project
   - pom.xml
   - src/
          - main/
               - java/
               - resources/
          - test/
               - java/
               - resources/

对于 WAR

project
   - pom.xml
   - src/
          - main/
               - java/
               - resources/
               - webapp/
                   - WEB-INF/
                       - web.xml
                   - index.jsp
                   - css/
                       - styles.css
          - test/
               - java/
               - resources/

所有位于webapp目录下的文件(除了WEB-INF/**)将通过servlet容器提供访问。 此外,如果您正在使用模板引擎并且不希望直接访问模板文件,则应将模板放入WEB-INF/目录中,例如:src/main/webapp/WEB-INF/pages/

META-INF目录实际上是Java元目录。您不应该在其中放置任何内容。


所以,换句话说,您的意思是它取决于包装类型?如果是 WARJAR,它将自动确定项目结构? - Ichroman Raditya Duwila
例如,如果我使用thymeleaf,那么我就不需要WEB-INF了,对吗?我只需将模板放在资源目录下即可。如果我有错,请纠正我。 - Ichroman Raditya Duwila
我在这里发现了新的东西。我使用了maven + spring boot应用程序,并将thymeleaf作为模板引擎,使用WAR进行打包,但它没有创建任何webapp目录。我认为这是因为thymeleaf。我说得对吗? - Ichroman Raditya Duwila
包装类型决定您实际想要的内容。WAR 是Web应用程序类型,位于您的 pom.xml 文件中。无论如何,您都需要 WEB-INF 目录。至少,您必须在其中放置 web.xml 文件。此外,您的模板必须在 WEB-INF/ 目录内。除了内部的 WEB-INF/** 之外,来自 webapp 目录的所有文件都将直接可用。如果缺少 webapp 目录,请创建它。 - ruslanys
@IchromanRaditya,实际上你的模板是网页内容。你应该将所有与前端相关的文件放在“webapp”目录中。在“resources”目录中,您将放置属性、配置等文件。 - ruslanys
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接