2. 简介

Apache Maven 是 Java 项目中最流行的构建工具之一。它不仅解决了依赖和仓库管理的问题,更重要的是推动了项目间统一的目录结构规范。

本文将快速解析 Maven 项目的标准目录结构,帮你理解这些约定背后的设计逻辑。

3. 目录结构

典型的 Maven 项目包含一个 pom.xml 文件和基于约定构建的目录结构:

└───maven-project
    ├───pom.xml
    ├───README.txt
    ├───NOTICE.txt
    ├───LICENSE.txt
    └───src
        ├───main
        │   ├───java
        │   ├───resources
        │   ├───filters
        │   └───webapp
        ├───test
        │   ├───java
        │   ├───resources
        │   └───filters
        ├───it
        ├───site
        └───assembly

⚠️ 虽然可以通过项目描述符自定义目录结构,但强烈不建议这样做。统一的结构能提高团队协作效率,避免踩坑。

接下来我们深入解析每个标准文件和子目录的用途。

4. 根目录

这是所有 Maven 项目的起点。根目录通常包含以下关键文件和目录:

  • pom.xml:项目的核心配置文件,定义了构建生命周期中的依赖和模块
  • LICENSE.txt:项目的开源协议声明(如 Apache 2.0、MIT 等)
  • README.txt:项目简要说明文档(现在更常用 README.md)
  • NOTICE.txt:项目使用的第三方库版权声明
  • src/main:存放最终会打包到 artifact 中的源代码和资源
  • src/test:包含所有测试代码和资源(不会被打包)
  • src/it:保留给 Maven Failsafe Plugin 使用的集成测试目录
  • src/site:存放通过 Maven Site Plugin 生成的项目文档
  • src/assembly:二进制包的组装配置目录

5. src/main 目录详解

作为 Maven 项目的核心目录,所有需要打包到最终 artifact(JAR/WAR)的文件都应放在这里。其子目录分工明确:

  • src/main/java:Java 源代码主目录
  • src/main/resources:配置文件存放区,包括:
    • 国际化(i18n)文件
    • 多环境配置文件(如 dev/prod)
    • XML 配置文件
  • src/main/webapp:Web 应用专用目录,包含:
    • JavaScript/CSS 文件
    • HTML 页面
    • 视图模板
    • 图片等静态资源
  • src/main/filters:构建阶段用于向资源文件注入值的过滤器配置

6. src/test 目录详解

该目录存放所有组件的测试代码,⚠️ 注意其内容不会进入最终产物。主要子目录包括:

  • src/test/java:测试用例源代码
  • src/test/resources:测试专用的配置文件
  • src/test/filters:测试阶段使用的资源过滤器配置

7. 总结

本文系统解析了 Apache Maven 的标准目录结构。遵循这些约定能带来三大优势:

✅ 降低新成员上手成本
✅ 提高多模块项目维护效率
✅ 避免自定义目录带来的构建问题

更多 Maven 项目结构示例可参考 GitHub 实例。记住:在 Maven 世界里,约定优于配置不是口号,而是提高效率的利器。


原始标题:Apache Maven Standard Directory Layout