Maven 是什么
Maven 定义
Maven是一个Java项目的“构建和依赖管理工具”。
它的功能主要是:
- 项目怎么组织目录
- 需要哪些第三方的jar包
- 怎么编译、测试、打包、发布
Before Maven
在没有 Maven 的年代,你要自己完成下面的活:
- 下载好 jar 包,然后导入到项目的lib文件夹里。
- 自己维护版本,各个jar包之间的版本匹配
- 不同机器的jar包不一样的时候,项目跑不起来,不适合团队开发
After Maven
Maven接管了上面需要人手动执行的操作:
- 不需要手动下包导包,Maven会更具你在pom.xml文件中的依赖配置情况,帮你自动下载指定版本的库,解决传递依赖的问题(A 依赖 B,B 又依赖 C)。
- Maven可以自动完成打包过程。
Maven 的关键概念
pom.xml 文件
这是本项目的总配置文件,Maven会读取这个文件完成操作。我们所需要的依赖,需要的插件、打包方式都在这里进行声明。
1 | <project> |
配置文件的标签名
groupId:组织/公司/大项目名artifactId:具体模块名version:版本号
在写一个依赖的时候,我们往往需要指定这三个标签值。
1 | <dependency> |
本地仓库和远程仓库
Maven 下依赖的过程是这样的:
- 你写好
pom.xml - 执行
mvn compile/mvn package等命令(可以用编译器一键完成) - Maven 先去本地仓库(你电脑某个
.m2/repository目录)找 - 找不到再去远程仓库(比如 Maven Central、阿里云镜像等)下载
- 下载完放到本地仓库,下次再用就不需要重新下载
生命周期管理
Maven把项目的“构建过程”抽象成一条流水线:
典型阶段:
clean:清理target目录compile:编译源码test:执行测试package:打包(jar/war)install:安装到本地仓库deploy:发布到远程仓库
插件
我们注意到 Maven 可以在 pom.xml 文件中配置插件。
这是因为Maven本身也是一个框架,需要通过Maven完成任务,也需要为Maven配置插件。
- 编译:
maven-compiler-plugin - 测试:
maven-surefire-plugin - 打包:
maven-jar-plugin、maven-war-plugin - Spring Boot 打包启动:
spring-boot-maven-plugin
Maven 和 JDK 的关系
JDK:是Java的编译器,为Java程序提供运行环境
Maven:调用JDK的编译器,帮我们组织JDk进行编译/打包流程
Maven 和 Spring / Spring Boot的关系
Spring 和 Spring boot 是 Java 框架,是由一系列库组成的。
Maven:用来自动下载这些框架的jar包,并且帮助我们运用这些jar包构建应用。
Maven 和 IDEA 的关系
IDEA:IDE,图形界面工具
Maven:命令行构建工具(IDE 只是帮你把命令包装成按钮)
👉 你在 IDEA 里点“maven 重新加载”,本质是帮你执行
mvn命令。
开发中运用Maven的标准流程
典型 Java 项目流程是这样的:
- 用 IDEA 创建 Maven 项目(或者 Spring Initializr)
- 写
pom.xml:- 指定 JDK 版本
- 引入 Spring、MyBatis、Lombok 等依赖
- 在
src/main/java写业务代码 - 运行:
- IDEA 里右键 run
- 或者在命令行
mvn package && java -jar xxx.jar
整个过程中,依赖管理 + 构建打包这块都交给 Maven 了