Maven 是一个广泛使用的自动化构建工具,主要用于 Java 项目的构建、依赖管理和项目信息管理。它由 Apache 软件基金会维护,旨在简化 Java 项目的开发流程,提高开发效率,并促进团队协作。Maven 的核心是 项目对象模型(Project Object Model, POM)。POM 是一个 XML 文件(pom.xml
),用于描述项目的结构、依赖、插件配置等。每个 Maven 项目都有一个唯一的 pom.xml
文件,它定义了项目的元数据,如项目名称、版本、开发者信息等。
Maven 的三个标准生命周期,这三套生命周期完全独立,互补影响,下面是详细解释。
target
目录)。 Maven 的插件系统是其强大的功能之一,在 Maven 的构建体系中,插件(Plugin)是实现各种构建任务的核心机制。每个插件可以包含一个或多个目标(Goal),而这些目标又可以绑定到Maven 生命周期的某个阶段上,从而实现自动化构建、测试、打包、部署等功能。Maven 有三个标准生命周期:default、clean 和 site,它们各自包含一系列预定义的阶段(Phase)。插件的目标可以通过
插件名称 | 作用 | 目标(Goal) | 绑定阶段 |
---|---|---|---|
maven-clean-plugin |
清理项目,删除上一次构建生成的文件(如 target 目录) |
clean |
clean |
maven-compiler-plugin |
编译 Java 源代码 | compile |
compile |
maven-surefire-plugin |
运行单元测试 | test |
test |
maven-jar-plugin |
打包为 JAR 文件 | jar |
package |
maven-war-plugin |
打包为 WAR 文件 | war |
package |
maven-deploy-plugin |
将项目部署到远程仓库 | deploy |
deploy |
maven-install-plugin |
将项目安装到本地仓库 | install |
install |
maven-source-plugin |
打包源代码 | jar-no-fork |
verify |
maven-resources-plugin |
处理资源文件 | resources |
process-resources |
maven-test-resources-plugin |
处理测试资源文件 | testResources |
process-test-resources |
maven-site-plugin |
生成项目站点文档 | site |
site |
maven-javadoc-plugin |
生成 Javadoc 报告 | generate |
any |
maven-assembly-plugin |
打包为自定义格式(如 ZIP、TAR) | single |
any |
maven-antrun-plugin |
执行 Ant 任务 | run |
any |
maven-dependency-plugin |
管理依赖 | list , tree , analyze |
any |
maven-release-plugin |
管理版本发布 | release:prepare , release:perform |
deploy |
maven-remote-resources-plugin |
共享和同步资源 | remote-resources:process |
generate-resources |
sql-maven-plugin |
执行 SQL 脚本 | execute |
initialize |
taglist-maven-plugin |
生成源代码中的标签列表报告 | taglist |
site |
versions-maven-plugin |
检查和更新依赖版本 | display-dependency-updates , use-latest-versions |
validate |
插件的使用方式如下:
mvn [plugin-name]:[goal-name]
Maven 使用 仓库 来存储和检索项目依赖。Maven 有以下几种类型的仓库:
\~/.m2/repository
。Maven 的 settings.xml
文件可以配置仓库地址,例如:
central
https://repo.maven.apache.org/maven2
alimaven
central
aliyun maven
http://maven.aliyun.com/nexus/content/repositories/central/
Maven 提供了多种高级功能,帮助开发者更高效地管理项目:
4.0.0
com.example
xman-parent
1.0.0
pom
ruoyi-business
ruoyi-common
com.example
xman-parent
1.0.0
ruoyi-business
org.springframework.boot
spring-boot-starter-web
pom.xml
中详细配置插件,支持自定义插件目标和执行顺序。Maven 的优势包括:
Maven 的局限性包括:
二.
Maven 项目通常遵循以下标准目录结构:
src/main/java
:存放主源代码。src/test/java
:存放测试代码。src/main/resources
:存放资源文件(如配置文件、图片等)。src/test/resources
:存放测试资源文件。target
:存放构建输出(如编译后的类文件、打包后的 JAR/WAR 文件)。pom.xml
:项目配置文件,定义项目依赖、插件、生命周期等。Maven 通过 pom.xml
文件中的
标签管理项目依赖。开发者只需声明所需的依赖项,Maven 会自动从远程仓库(如 Maven Central)下载所需的 JAR 文件。例如:
mysql
mysql-connector-java
5.1.32
Maven 支持依赖的版本管理,可以通过
标签锁定依赖版本,确保项目的一致性。
org.springframework.boot
spring-boot-starter-web
3.4.2
com.baomidou
mybatis-plus-boot-starter
3.5.10
com.alibaba
easyexcel
3.3.2
org.springframework.boot
spring-boot-starter-web
com.baomidou
mybatis-plus-boot-starter
3.4.0
3.4.2
3.5.10
org.springframework.boot
spring-boot-starter-web
${spring-boot.version}
导入Spring Boot BOM必须用
org.springframework.boot
spring-boot-dependencies
3.4.2
pom
import
场景 | 无dependencyManagement | 使用dependencyManagement |
多模块版本同步 | 各子模块需单独指定版本 | 父POM统一控制 |
升级框架版本 | 需修改所有子模块pom.xml | 仅修改父POM一处 |
冲突解决 | 容易因传递依赖导致版本冲突 | 明确指定版本,冲突概率降低 |
mvn -pl web-admin clean install # 仅对web-admin模块执行clean和install
mvn -am -pl web-admin install # 处理web-admin及其依赖模块
mvn -rf web-common compile # 从web-common模块开始编译
mvn test -Dtest=MyTestClass # 运行指定测试类
mvn install -DskipTests # 跳过测试
mvn test -Dtest=MyTestClass # 运行指定测试类
mvn install -DskipTests # 跳过测试
mvn clean install -U # 强制更新远程仓库索引
mvn dependency:tree -Dverbose # 显示完整的依赖树(含冲突)
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin -Ddetail
mvn clean package -DskipTests
mvn -pl web-admin deploy
mvn -T 4 clean install # 使用4线程并行构建