Maven 项目管理工具
依赖管理是指 Maven 能自动下载、管理项目所需的第三方库(如 Spring、MyBatis),并处理库之间的依赖关系(避免版本冲突)。开发者只需在配置文件中声明依赖,Maven 会自动完成后续的依赖解析和资源获取。项目构建是指 Maven 能自动化执行一系列构建流程编译:将 Java 源码编译为字节码。测试:执行单元测试代码。打包:将项目打包为 jar、war 等格式。部署:将打包后的产物部署
一、Maven 的概念
1. 什么是 Maven
Maven 是一款基于项目对象模型(POM)的项目管理工具,它主要用于 Java 项目的依赖管理和项目构建,能自动化完成编译、测试、打包、部署等流程。
2. 什么是依赖管理
依赖管理是指 Maven 能自动下载、管理项目所需的第三方库(如 Spring、MyBatis),并处理库之间的依赖关系(避免版本冲突)。开发者只需在配置文件中声明依赖,Maven 会自动完成后续的依赖解析和资源获取。
3. 什么是项目构建
项目构建是指 Maven 能自动化执行一系列构建流程,包括:
- 编译:将 Java 源码编译为字节码。
- 测试:执行单元测试代码。
- 打包:将项目打包为 jar、war 等格式。
- 部署:将打包后的产物部署到服务器或仓库。
4. Maven 的应用场景
- Java 项目开发:管理依赖、自动化构建。
- 多模块项目:通过聚合和继承管理复杂项目结构。
- 持续集成(CI):与 Jenkins 等工具集成,实现自动化构建和测试。
5. 为什么使用 Maven
- 解决依赖地狱:自动处理依赖的传递和冲突。
- 标准化项目结构:遵循 “约定优于配置”,项目结构统一,降低学习成本。
- 自动化构建流程:一键完成编译、测试、打包等操作。
- 跨环境一致性:确保不同开发环境的构建结果一致。
6. Maven 的模型
Maven 基于三个核心模型运作:
- 项目对象模型(POM):通过
pom.xml描述项目的依赖、插件、构建规则等。 - 依赖管理模型:通过坐标(GroupId、ArtifactId、Version)唯一标识依赖,自动解析和下载。
- 构建生命周期模型:定义了编译、测试、打包等一系列构建阶段,每个阶段由插件执行具体任务。
二、Maven 初始
1. Maven 的安装
-
步骤 1:下载 Maven访问Maven 官网,下载对应系统的二进制包(如
apache-maven-3.9.xxx-bin.zip)。 -
步骤 2:解压并配置环境变量
- 解压到任意目录(如
D:\apache-maven-3.9.x)。 - 配置系统环境变量
MAVEN_HOME为解压目录,将%MAVEN_HOME%\bin添加到Path变量中。
- 解压到任意目录(如
-
步骤 3:验证安装打开命令行,执行
mvn -v,若输出 Maven 版本和 Java 版本信息,则安装成功。
2. Maven 的第一个项目(命令行方式)
通过 Maven 的archetype(项目模板)快速创建 Java 项目:
# 创建一个简单的Java项目
mvn archetype:generate -DgroupId=com.example -DartifactId=my-first-maven -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
groupId:组织标识(通常是公司域名倒写)。artifactId:项目标识(项目名称)。- 执行后,Maven 会创建标准的项目结构,并自动生成
pom.xml和示例代码。
3. Maven 的第二个项目(多模块认知)
为了理解 Maven 的多模块管理,可创建一个包含 “业务模块” 和 “工具模块” 的多模块项目:
# 先创建父项目
mvn archetype:generate -DgroupId=com.example -DartifactId=my-multi-module -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
# 进入父项目目录,创建子模块
cd my-multi-module
mvn archetype:generate -DgroupId=com.example -DartifactId=module-service -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
mvn archetype:generate -DgroupId=com.example -DartifactId=module-util -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
父项目的pom.xml会自动添加子模块的聚合配置,子模块可通过依赖引用其他模块。
4. Maven 仓库配置
Maven 的仓库分为三类:
- 本地仓库:默认位于
C:\Users\用户名\.m2\repository,存储下载的依赖包。 - 中央仓库:Maven 官方维护的公共仓库,包含绝大多数开源依赖。
- 私服仓库:企业内部搭建的私有仓库,用于存储内部项目依赖或缓存中央仓库资源。
可通过修改conf/settings.xml配置仓库:
<!-- 配置本地仓库路径 -->
<localRepository>D:\maven-repo</localRepository>
<!-- 配置阿里云镜像(加速中央仓库下载) -->
<mirrors>
<mirror>
<id>aliyun-maven</id>
<name>阿里云Maven镜像</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
5. Idea 整合 Maven 项目
- 打开 IDEA,进入
File → Settings → Build, Execution, Deployment → Build Tools → Maven。 - 配置
Maven home path为本地 Maven 安装目录,User settings file为conf/settings.xml,Local repository为本地仓库路径。 - 新建项目时,选择 “Maven”,并选择对应的 archetype(如
maven-archetype-quickstart),即可创建 Maven 管理的项目。
6. Maven 项目视图
Maven 项目在 IDEA 中的核心视图:
- 项目结构:遵循约定的目录结构,
src/main/java存放源码,src/main/resources存放资源文件,src/test/java存放测试代码。 - Maven 面板:位于右侧,可查看项目的依赖、插件,执行构建命令(如
clean、compile、package)。
三、Maven 的进阶
1. pom.xml 文件解析
pom.xml是 Maven 项目的核心配置文件,主要包含以下部分:
- 项目基本信息:
groupId、artifactId、version、packaging(打包方式,如 jar、war)。 - 依赖配置:
<dependencies>标签下声明项目依赖。 - 插件配置:
<build><plugins>标签下配置构建插件(如编译插件、测试插件)。 - 仓库配置:
<repositories>标签下配置自定义仓库。
2. 坐标
Maven 通过 ** 坐标(GroupId + ArtifactId + Version)** 唯一标识一个依赖,示例:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.20</version>
</dependency>
groupId:组织标识,如org.springframework。artifactId:项目 / 模块标识,如spring-core。version:版本号,如5.3.20。
3. 依赖
依赖是指项目依赖的第三方库或模块,Maven 通过坐标自动管理依赖的下载和传递。
示例:添加 MyBatis 依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
4. 依赖范围
依赖范围(<scope>)定义了依赖在哪些构建阶段有效,常见范围:
| 范围 | 编译期 | 测试期 | 运行期 | 说明 |
|---|---|---|---|---|
compile |
✔️ | ✔️ | ✔️ | 默认范围,编译、测试、运行都有效(如 Spring 核心包) |
test |
❌ | ✔️ | ❌ | 仅测试期有效(如 JUnit) |
provided |
✔️ | ✔️ | ❌ | 编译、测试有效,运行时由容器提供(如 Servlet API) |
runtime |
❌ | ✔️ | ✔️ | 测试、运行有效,编译时不需要(如 JDBC 驱动) |
示例:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
5. 依赖传递和可选依赖
-
依赖传递:Maven 会自动传递依赖的依赖(如 A 依赖 B,B 依赖 C,则 A 会间接依赖 C)。可通过
<exclusions>排除不需要的传递依赖。示例:<dependency> <groupId>com.example</groupId> <artifactId>module-a</artifactId> <version>1.0.0</version> <exclusions> <exclusion> <groupId>org.unwanted</groupId> <artifactId>unwanted-lib</artifactId> </exclusion> </exclusions> </dependency> -
可选依赖:通过
<optional>true</optional>标记依赖为可选,不会被传递。示例:<dependency> <groupId>com.example</groupId> <artifactId>optional-lib</artifactId> <version>1.0.0</version> <optional>true</optional> </dependency>
6. 仓库
除了中央仓库和本地仓库,Maven 还支持私服仓库和自定义远程仓库。在pom.xml中配置自定义仓库:
<repositories>
<repository>
<id>my-repo</id>
<name>自定义仓库</name>
<url>http://localhost:8081/repository/my-repo/</url>
</repository>
</repositories>
7. 生命周期
Maven 的构建生命周期分为三个核心周期,每个周期包含多个阶段:
- clean 周期:用于清理项目,包含
clean(清理编译产物)等阶段。 - default 周期:用于构建项目,包含
compile(编译)、test(测试)、package(打包)、install(安装到本地仓库)、deploy(部署到远程仓库)等阶段。 - site 周期:用于生成项目文档,包含
site(生成文档)、site-deploy(部署文档)等阶段。
执行命令时,Maven 会执行指定阶段及之前的所有阶段,例如执行mvn package,会依次执行compile、test、package阶段。
8. Maven 插件使用
Maven 的功能由插件实现,每个插件包含多个目标(Goal),可在pom.xml中配置插件:
示例:配置编译插件,指定 Java 版本
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
示例:执行自定义插件目标
mvn compiler:compile # 执行编译插件的compile目标
9. Maven 的继承和聚合
-
继承:用于抽取多模块项目的公共配置(如依赖版本、插件配置)。在父项目的
pom.xml中配置<parent>,子项目可继承父项目的配置。父项目示例:<groupId>com.example</groupId> <artifactId>parent-project</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.20</version> </dependency> </dependencies> </dependencyManagement>子项目示例:
<parent> <groupId>com.example</groupId> <artifactId>parent-project</artifactId> <version>1.0.0</version> </parent> <artifactId>child-project</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> </dependencies> -
聚合:用于将多模块项目整合为一个整体,在父项目的
pom.xml中配置<modules>,可一键构建所有子模块。示例:<modules> <module>module-service</module> <module>module-util</module> </modules>
四、Maven 的私服搭建
1. Maven 私服介绍
Maven 私服是企业内部的私有仓库,主要作用:
- 存储内部项目的依赖(如公司自研的公共模块)。
- 缓存中央仓库的依赖,提升下载速度,减少外网依赖。
- 统一管理依赖版本,避免版本冲突。
主流的 Maven 私服工具是Nexus Repository Manager。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)