Maven + Spring项目结构标准

时间:2017-06-15 08:19:07

标签: java spring maven web structure

实际上我是使用Maven和Spring的新手,我很好奇我们对项目结构的标准化。众所周知,如果我们第一次创建Maven项目,它只会给出这种结构:

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

java 目录是我们放置java代码的目录,据我所知。但是,当我们创建一个应该包含HTML,CSS或Javascript等Web文件的Web应用程序时,我们需要另一个目录来放置它。

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

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

在其他一些maven web项目示例中,我发现了不同的结构,它还有下的 webapp 目录。在 webapp 中,它有 WEB-INF META-INF 目录。他们将Web文件(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目录吗?
  4. 如果有人能给我一个明确的解释,我将感激不尽。感谢。

1 个答案:

答案 0 :(得分:0)

Actually it depends on the type of an application. If you want to make a JAR file, Spring-Boot application, for example, when servlet container is embedded, then you don't need the webapp directory.

So, the best structure of single Maven project for JAR is:

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

For WAR:

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

All files under webapp (except WEB-INF/**) directory will be available thru servlet container. Also, if you are using template engine and don't want to give an access to the templates files directly, then you should put templates into WEB-INF/ directory, like: src/main/webapp/WEB-INF/pages/.

And META-INF directory actually is Java meta directory. You should not put anything inside of it.