Maven 项目的基本结构

ops/2025/2/6 15:30:43/

Maven 项目采用了标准的目录结构,旨在统一项目组织方式,提高可维护性,并且让不同的开发人员更容易理解和使用项目。通过遵循约定的目录结构,Maven 可以自动化管理项目的构建过程,并简化构建、测试、部署等任务。

1. Maven 项目的标准目录结构

Maven 项目通常遵循以下目录结构:

my-project/
├── pom.xml
├── src/
│   ├── main/
│   │   ├── java/
│   │   ├── resources/
│   │   ├── webapp/ (如果是 Web 项目)
│   ├── test/
│   │   ├── java/
│   │   ├── resources/
├── target/
├── .mvn/
└── README.md

1.1 pom.xml 文件

  • 位置:项目根目录下
  • 作用pom.xml 是 Maven 项目的核心文件,定义了项目的元数据(如 groupIdartifactIdversion 等),依赖库,构建插件,构建生命周期等信息。所有 Maven 操作都需要依赖 pom.xml 文件。

1.2 src/ 目录

src 目录是 Maven 项目的主要源代码和资源存放位置。根据约定,src 目录下有两个子目录:maintest

1.2.1 src/main/ 目录

该目录包含项目的主代码、资源文件等。

  • src/main/java/

    • 这里存放项目的 Java 源代码文件。
    • 项目的代码逻辑类、服务类、工具类等都应放置在该目录下。
    • Maven 会在编译阶段自动编译这个目录下的所有 Java 文件。

    示例目录

    src/main/java/com/example/myapp
    
  • src/main/resources/

    • 这里存放项目的资源文件,例如配置文件(application.propertieslog4j.properties 等)、XML 文件、静态文件等。
    • Maven 会将该目录中的文件一并打包到最终的 JAR 或 WAR 文件中。

    示例目录

    src/main/resources/application.properties
    
  • src/main/webapp/(如果是 Web 项目):

    • 如果你的项目是一个 Web 项目(如基于 Servlet 的应用),那么你将把 Web 相关的文件放在 src/main/webapp/ 目录下。
    • 例如:HTML、JSP 文件、静态资源(如 CSS、JS)、WEB-INF 配置文件等。

    示例目录

    src/main/webapp/WEB-INF/web.xml
    
1.2.2 src/test/ 目录

该目录用于存放测试代码和测试资源文件。Maven 会自动识别并运行该目录下的测试。

  • src/test/java/

    • 这里存放的是与 src/main/java/ 目录下的 Java 类对应的测试代码。
    • 测试类应该与源代码的包结构一致,并且通常以 Test 后缀命名(如 MyServiceTest.java)。
    • Maven 默认会使用 JUnit 或 TestNG 来运行测试。

    示例目录

    src/test/java/com/example/myapp/MyServiceTest.java
    
  • src/test/resources/

    • 这里存放的是测试相关的资源文件,例如模拟数据、配置文件等。
    • 这些资源文件通常会被测试用例加载。

    示例目录

    src/test/resources/test-config.properties
    
1.2.3 src/ 目录的作用

src/ 目录是 Maven 项目的核心部分,其中 main 用于存放应用的源代码和资源,test 用于存放测试代码和资源。Maven 会根据这些目录中的文件自动完成项目的构建、测试等任务。

1.3 target/ 目录

  • 位置:项目根目录下
  • 作用target 目录是 Maven 构建过程中生成的文件输出目录。所有构建的输出(如编译的字节码文件、打包的 JAR/WAR 文件、测试结果等)都会存放在此目录中。
  • 在执行 mvn package 等构建命令时,编译后的文件和最终打包的文件(如 my-app-1.0-SNAPSHOT.jar)会被放到该目录。

示例

target/my-app-1.0-SNAPSHOT.jar

1.4 .mvn/ 目录

  • 位置:项目根目录下
  • 作用:该目录是 Maven 配置和操作所需要的文件所在。它包含 Maven Wrapper 脚本,允许你在没有安装 Maven 的情况下,通过 mvnwmvnw.cmd 命令执行 Maven 操作。

1.5 README.md 文件

  • 位置:项目根目录下
  • 作用README.md 文件用于描述项目的基本信息、功能、使用方法等。它是项目的文档文件,方便开发者或其他用户理解项目的背景、安装步骤、依赖等。

2. Maven 项目的目录结构说明

目录/文件说明
pom.xml项目的核心配置文件,定义项目的依赖、插件等重要信息。
src/存放项目的源代码和资源文件。
src/main/存放应用的主代码和资源文件。
src/main/java/存放 Java 源代码文件。
src/main/resources/存放应用的配置文件、XML 文件等资源文件。
src/main/webapp/Web 项目的文件目录(包括 HTML、JSP、WEB-INF 等)。
src/test/存放测试代码和资源文件。
src/test/java/存放与 src/main/java/ 中代码对应的测试代码。
src/test/resources/存放测试相关的资源文件。
target/Maven 构建时生成的输出目录,存放编译的文件、JAR 包等。
.mvn/Maven Wrapper 相关文件夹,提供一种无需安装 Maven 的方式来执行构建命令。
README.md项目的文档文件,描述项目的功能、安装与使用说明等。

3. 总结

Maven 项目的标准目录结构有助于开发团队维护一致性,使得项目的构建、测试、部署变得更加高效和可管理。理解并遵循 Maven 的目录结构,可以帮助开发人员更好地组织代码,提高团队协作效率。通过 src/main 存放主代码和资源,src/test 存放测试代码,target 存放构建输出,Maven 使得项目构建流程更加规范化、自动化。

掌握 Maven 项目的目录结构,能够为你的 Java 项目管理和构建打下坚实的基础。


http://www.ppmy.cn/ops/156182.html

相关文章

【LeetCode 刷题】贪心算法(2)-进阶

此博客为《代码随想录》二叉树章节的学习笔记,主要内容为贪心算法进阶的相关题目解析。 文章目录 135. 分发糖果406. 根据身高重建队列134. 加油站968. 监控二叉树 135. 分发糖果 题目链接 class Solution:def candy(self, ratings: List[int]) -> int:n len…

提示词实践总结

目录 一、要求创建SqlServer表(ChatGpt) 二、要求生成多层架构代码(Cursor) 三、要求修改方法返回值类型(Cursor) 四、要求修改方法入参(Cursor) 五、复杂的多表关联生成&#…

实验十四 EL和JSTL

实验十四 EL和JSTL 一、实验目的 1、掌握EL表达式的使用 2、掌握JSTL的使用 二、实验过程 1、在数据库Book中建立表Tbook,包含图书ID,图书名称,图书价格。实现在bookQuery.jsp页面中模糊查询图书,如果图书的价格在50元以上&#…

AI回答 | spring,springboot,spring MVC,servlet, spring web之间的联系与支持

我的问题是:spring,springboot,spring MVC,servlet, spring web之间的联系与支持?我希望知道这些技术之间的演变、来龙去脉。如果中间穿插着关联的技术也请告诉我。【通过AI我理解到这是个spring生态问题,我…

Vim的基础命令

移动光标 H(左) J(上) K(下) L(右) $ 表示移动到光标所在行的行尾, ^ 表示移动到光标所在行的行首的第一个非空白字符。 0 表示移动到光标所在行的行首。 W 光标向前跳转一个单词 w光标向前跳转一个单词 B光标向后跳转一个单词 b光标向后跳转一个单词 G 移动光标到…

Ansible在多台服务器上运行python脚本

使用 Ansible 在多台服务器上批量运行 Python 脚本是一种高效且可靠的方式。以下是具体的实现步骤和示例代码: --- ### 1. 准备工作 - **安装 Ansible**:确保您的 Ansible 控制节点已安装 Ansible。如果没有安装,可以通过以下命令安装&#x…

PVE 中 Debian 虚拟机崩溃后,硬盘数据怎么恢复

问题 在 PVE 中给 Debian 虚拟机新分配硬盘后,通过 Debian 虚拟机开启 Samba 共享该硬盘。如果这个 Debian 虚拟机崩溃后,怎么恢复 Samba 共享硬盘数据。 方法 开启 Samba 共享相关知识:挂载硬盘和开启Samba共享。 新建一个虚拟机&#xf…

CH340G上传程序到ESP8266-01(S)模块

文章目录 概要ESP8266模块外形尺寸模块原理图模块引脚功能 CH340G模块外形及其引脚模块引脚功能USB TO TTL引脚 程序上传接线Arduino IDE 安装ESP8266开发板Arduino IDE 开发板上传失败上传成功 正常工作 概要 使用USB TO TTL(CH340G)将Arduino将程序上传…