Maven 项目构建基础
Maven 是一个基于项目对象模型(POM)的构建工具,通过标准化项目结构和构建流程简化开发。其核心功能包括:
- 标准化构建流程 :通过生命周期阶段(如
compile、test、package)自动化构建步骤。 - 依赖管理:自动下载和管理项目所需的库文件,解决传递性依赖冲突。
- 约定优于配置 :默认目录结构减少配置冗余,例如
src/main/java存放主代码,src/test/java存放测试代码。
依赖管理与坐标
Maven 使用 坐标(GAV) 唯一标识依赖:
- GroupId :组织标识(如
org.apache)。 - ArtifactId :项目名称(如
commons-lang3)。 - Version :版本号(如
3.12.0)。
依赖范围(<scope>)控制依赖的使用阶段:
compile(默认):编译和运行时均有效。test:仅测试阶段有效(如 JUnit)。provided:运行时由容器提供(如 Servlet API)。
XML
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
<scope>compile</scope>
</dependency>
约定的目录结构
Maven 强制约定目录结构,确保项目一致性:
project-root
├── src
│ ├── main
│ │ ├── java # 主代码
│ │ ├── resources # 配置文件
│ │ └── webapp # Web 应用资源
│ └── test
│ ├── java # 测试代码
│ └── resources # 测试配置
├── target # 构建输出目录
└── pom.xml # 项目配置
仓库机制
- 本地仓库 :用户目录下的
.m2/repository,缓存下载的依赖。 - 远程仓库 :
- 中央仓库(repo.maven.apache.org):默认公共仓库。
- 私服(如 Nexus):企业内部镜像,加速依赖下载。

配置私服示例:
XML
<repositories>
<repository>
<id>my-nexus</id>
<url>http://nexus.example.com/repo</url>
</repository>
</repositories>
POM 文件详解
pom.xml 是 Maven 的核心配置文件,包含以下关键部分:
项目基本信息
XML
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging> <!-- 打包类型:jar/war/pom -->
依赖管理
通过 <dependencies> 声明项目依赖,Maven 自动解析传递性依赖。使用 <dependencyManagement> 统一管理多模块项目的版本:
XML
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.10</version>
</dependency>
</dependencies>
</dependencyManagement>
构建配置
通过 <build> 配置插件和资源过滤:
XML
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering> <!-- 启用变量替换 -->
</resource>
</resources>
</build>
生命周期与插件
Maven 生命周期分为三套:
- default :核心构建流程(
compile、test、package、install)。 - clean :清理
target目录。 - site:生成项目文档。
每个阶段由插件目标(goal)执行。例如,maven-compiler-plugin 的 compile 目标绑定到 compile 阶段。
以下是default的四个阶段详解:

自定义插件执行示例:
XML
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>false</skipTests>
</configuration>
</plugin>
</plugins>
高级特性
- 多模块项目 :通过
<modules>管理子模块,父 POM 使用<packaging>pom</packaging>。 - Profile:根据环境(如开发/生产)切换配置:
XML
<profiles>
<profile>
<id>dev</id>
<properties>
<env>development</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
多模块项目管理

1. 模块拆分逻辑
图中把项目拆成了 4 个独立 Maven 模块,每个模块对应一个分层职责:
- pojo 模块:存放实体类(比如数据库表对应的 JavaBean),是各层之间传递数据的 "载体"。
- controller 模块:负责接收前端请求、返回响应,是 "前后端交互的入口"。
- service 模块:处理业务逻辑,是 "业务规则的实现层"。
- dao 模块:负责与数据库交互(比如执行 SQL),是 "数据操作的底层"。
2. 模块依赖关系
各模块的依赖是单向、自上而下的:
- controller、service、dao 模块都依赖 pojo 模块(因为要用到实体类传递数据);
- controller 依赖 service 模块(调用业务逻辑);
- service 依赖 dao 模块(调用数据操作)。
这种依赖关系通过 Maven 的<dependency>配置实现,既明确了各模块职责,也避免了循环依赖。
3. 整体流程
前端页面 → controller(接收请求)→ service(处理业务)→ dao(操作数据库),而 pojo 是贯穿各层的数据 "容器"。
这个结构的优势是解耦、便于维护:比如要修改数据库操作,只动 dao 模块;要改业务规则,只动 service 模块。
总结
Maven 通过标准化和自动化显著提升项目构建效率。深入理解 POM 文件、依赖管理、生命周期和插件机制,能够灵活应对复杂项目需求。结合私服和 Profile 等高级特性,可进一步优化团队协作和部署流程。