1、什么是Maven?
Maven 是一个基于 项目对象模型(POM,Project Object Model) 的 构建工具 和 依赖管理工具,主要用于 Java 项目(也支持其他语言如 Scala、Kotlin 等)。它由 Apache 软件基金会维护,旨在简化项目的构建、依赖管理、文档生成和发布流程。
2、为什么使用 Maven?
传统 Java 项目的痛点:
- 手动管理依赖:需要自己下载 JAR 文件并配置 classpath,容易出错。
- 构建流程不统一:不同开发者可能使用不同的构建方式(如 Ant、手动编译)。
- 项目结构混乱:没有统一标准,导致协作困难。
Maven 的优势:
- 自动依赖管理(从中央仓库下载)
- 标准化构建命令(如 mvn clean install)
- 统一的项目结构(如 src/main/java 存放源码)
- 丰富的插件生态(测试、打包、部署等)
3、Maven的安装
maven下载地址:
Index of /dist/maven/maven-3https://archive.apache.org/dist/maven/maven-3/
maven中央仓库: https://mvnrepository.com/



4、Maven仓库种类
仓库种类包括:本地仓库、中心仓库、远程仓库(私服)。
1)本地仓库:打开Maven-conf目录下的settings.xml,可以看到localRepository的注解:Default: ${user.home}/.m2/repository,即Maven本地仓库的默认位置是系统盘下的路径;
2)中央仓库:启动Maven工程时,先通过jar包坐标在本地仓库寻找jar包,若本地没有,在联网的情况下会去中央仓库下载,未联网的情况下因找不到jar包会报错。中央仓库放置了几乎所有的开源jar包;
3)远程仓库:实际企业项目开发时,为了方便管理,且未联网的情况下也正常开发,会创建一个远程仓库,别名为私服。公司可以通过局域网从远程仓库获取jar包。远程仓库的jar包可以是本地上传的,也可以是从中央仓库下载的。

5、Maven标准目录机构
一个典型的 Maven 项目目录结构如下:
项目根目录/
├── pom.xml # Maven 项目配置文件
├── src/ # 源代码和资源文件
│ ├── main/ # 主代码(编译后进入最终包)
│ │ ├── java/ # Java 源代码
│ │ ├── resources/ # 配置文件(如 .properties, .xml)
│ │ ├── webapp/ # Web 项目特有(如 JSP, HTML)
│ │ └── ... # 其他语言(如 Kotlin 使用 kotlin/)
│ └── test/ # 测试代码(不进入最终包)
│ ├── java/ # 测试 Java 代码
│ ├── resources/ # 测试资源文件
│ └── ... # 其他测试代码
└── target/ # 构建输出目录(编译后的 class、生成的 JAR/WAR)

src/main/java目录:核心代码部分;
src/main/resources:配置文件部分;
src/test目录:测试代码部分;
src/test/resources:测试配置文件。
src/main/webapp:页面资源,包含js、css、图片等。
6、IDEA创建Maven项目
1、打开IDEA创建Maven项目(以SpringBoot项目为例)

2、项目配置maven

3、查看pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
<relativePath/>
</parent>
<groupId>com.lw.mavendemo</groupId>
<artifactId>maven-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>maven-demo</name>
<description>maven-demo</description>
<packaging>war</packaging>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4、打开系统命令行

7、Maven常用命令
**1、mvn clean:**删除编译文件target,在导入已有的项目时,clean一下,因为每个人的开发环境不同,所以要删除掉原来的编译信息

**2、mvn compile:**编译src/main目录下的代码,结果放在target目录下;

3、 **mvn test:**不仅编译src/main下代码,也编译src/test下的代码

**4、mvn package:**不仅编译src/main下代码,也编译src/test下的代码,且打了war包或jar包


**5、mvn install:**不仅编译src/main下代码,也编译src/test下的代码,且打了war包,此外,把当前项目的jar包存在了本地仓库。


6、mvn **deploy:**将构件部署到 远程仓库(如 Nexus),需在 pom.xml 中配置<distributionManagement>。
8、Maven的生命周期
Maven 生命周期按照构建过程分为三个部分,即 清理(clean)、构建(build) 和 站点生成(site)。每个部分包含不同的阶段(phase),执行的顺序是固定的,也就是说 Maven 在执行构建时会依次运行每个阶段。
以下是 Maven 的生命周期和各个阶段的简要说明:
- 清理生命周期:
a. pre-clean:在清理之前执行的动作
b. clean:清理上一次构建生成的文件 - 构建生命周期:
a. validate:验证项目是否正确并且所有必要信息都可用
b. compile:编译项目的源代码
c. test:测试编译后的代码
d. package:将编译后的代码打包成可发布的格式,如 JAR、WAR 等
e. install:将打包好的代码安装到本地仓库,方便其他项目进行依赖管理
f. deploy:将打包好的代码部署到远程仓库,方便其他人使用 - 站点生命周期:
a. pre-site:在生成站点之前执行的动作
b. site:生成项目的站点文档
c. post-site:在生成站点之后执行的动作,如部署站点到服务器上
d. site-deploy:将生成的站点部署到远程服务器上
9、maven依赖管理-pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
<relativePath/>
</parent>
<groupId>com.lw.mavendemo</groupId>
<artifactId>maven-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>maven-demo</name>
<description>maven-demo</description>
<packaging>war</packaging>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>central</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<layout>default</layout>
<!-- 是否开启发布版构件下载 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否开启快照版构件下载 -->
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
|--------------------------|----------------------------------------|
| 标签 | 作用 |
| <project> | POM 文件的根标签。 |
| <modelVersion> | 指定 POM 模型的版本(固定为 4.0.0 )。 |
| <parent> | 继承父 POM(如 Spring Boot Starter Parent)。 |
| <groupId> | 组织标识(如 com.company)。 |
| <artifactId> | 项目名称。 |
| <version> | 项目版本( SNAPSHOT 表示开发中版本)。 |
| <packaging> | 打包方式(jar/war)。 |
| <properties> | 定义变量(如 Java 版本)。 |
| <dependencies> | 声明项目依赖。 |
| <dependencyManagement> | 统一管理依赖版本(多模块项目常用)。 |
| <repositories> | 配置远程仓库地址(如阿里云镜像)。 |
| <build> | 配置构建插件(如 spring-boot-maven-plugin)。 |