Maven从入门到精通指南
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)。 |