目录
[1. 什么是Maven](#1. 什么是Maven)
[2. 项目构建:从代码到部署的标准化流程](#2. 项目构建:从代码到部署的标准化流程)
[2.1 Maven构建生命周期](#2.1 Maven构建生命周期)
[2.2 传统构建 vs Maven构建](#2.2 传统构建 vs Maven构建)
[3. 依赖管理:解决"JAR地狱"的利器](#3. 依赖管理:解决“JAR地狱”的利器)
[3.1 依赖声明](#3.1 依赖声明)
[3.2 依赖传递与冲突解决](#3.2 依赖传递与冲突解决)
[4. Maven仓库:依赖的存储与分发](#4. Maven仓库:依赖的存储与分发)
[4.1 仓库类型](#4.1 仓库类型)
[4.2 配置镜像仓库](#4.2 配置镜像仓库)
[5. Maven模型](#5. Maven模型)
[1. 安装Maven](#1. 安装Maven)
[1.1 环境准备](#1.1 环境准备)
[1.2 配置步骤](#1.2 配置步骤)
[2. 创建第一个Maven项目](#2. 创建第一个Maven项目)
[2.1 项目结构](#2.1 项目结构)
[2.2 编写POM文件](#2.2 编写POM文件)
[2.3 编写代码与测试](#2.3 编写代码与测试)
[2.4 构建与运行](#2.4 构建与运行)
[3. Maven的第二个项目](#3. Maven的第二个项目)
[3.1 项目结构](#3.1 项目结构)
[3.2 编写POM文件](#3.2 编写POM文件)
[3.3 编写代码与测试](#3.3 编写代码与测试)
[3.4 测试打包HelloFriend项目](#3.4 测试打包HelloFriend项目)
一、Maven的概念
1. 什么是Maven
1.1 Maven (意为"专家")是一款专为Java项目设计的跨平台项目管理工具,核心功能包括:
-
项目构建:自动化编译、测试、打包、部署。
- 理想的项目构建:高度自动化,跨平台,可重用的组件,标准化的流程
-
依赖管理:自动下载和管理第三方库(JAR包)。
-
项目信息管理:统一维护项目元数据(如版本、开发者信息)。
1.2 为什么需要Maven?
-
传统构建的痛点:
-
手动操作:开发人员需手动编译、测试、部署,效率低。
-
依赖混乱:JAR包版本冲突,难以维护。
-
缺乏标准化:不同开发者的环境配置差异导致协作困难。
-
-
Maven的解决方案:
-
约定优于配置 :默认目录结构(如
src/main/java
)减少配置成本。 -
生命周期管理 :通过命令(如
mvn compile
)自动化执行构建流程。 -
中央仓库支持:从全球仓库自动下载依赖,避免手动管理。
-
2. 项目构建:从代码到部署的标准化流程
2.1 Maven构建生命周期
Maven定义了三套生命周期,每个生命周期包含多个阶段(Phase):
-
Clean :清理项目(删除
target
目录)。 -
Default:核心构建流程(编译、测试、打包、安装)。
-
Site:生成项目文档站点。
典型构建阶段:
bash
mvn clean # 清理
mvn compile # 编译主代码
mvn test # 运行单元测试
mvn package # 打包为JAR/WAR
mvn install # 安装到本地仓库
mvn deploy # 部署到远程仓库
2.2 传统构建 vs Maven构建
步骤 | 传统方式 | Maven方式 |
---|---|---|
编译 | 手动执行javac |
mvn compile |
测试 | 手动运行JUnit测试类 | mvn test (自动执行所有测试) |
依赖管理 | 手动下载并配置JAR包 | 声明依赖,Maven自动下载 |
打包 | 手动生成JAR/WAR文件 | mvn package (按POM配置生成包) |
3. 依赖管理:解决"JAR地狱"的利器
3.1 依赖声明
在pom.xml
中通过**坐标(GAV)**声明依赖:
XML
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
-
GAV :
groupId
(组织标识)、artifactId
(项目名)、version
(版本)。 -
scope :控制依赖的作用范围(如
test
表示仅测试阶段有效)。
3.2 依赖传递与冲突解决
-
依赖传递:若A依赖B,B依赖C,则A自动引入C。
-
冲突解决 :Maven采用最短路径优先 和先声明优先原则,避免版本冲突。
4. Maven仓库:依赖的存储与分发
4.1 仓库类型
-
本地仓库 :默认位于
~/.m2/repository
,缓存下载的依赖。 -
远程仓库:
-
中央仓库:Maven官方维护,包含绝大多数开源库。
-
私服:企业内部搭建,加速依赖下载并管理私有组件。
-
4.2 配置镜像仓库
在settings.xml
中配置阿里云镜像加速下载:
XML
<mirror>
<id>aliyun</id>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
5. Maven模型

二、初识Maven
1. 安装Maven
1.1 环境准备
-
JDK 1.8+ :确保
JAVA_HOME
环境变量正确配置。 -
下载Maven :从官网下载二进制包(如
apache-maven-3.8.6-bin.zip
)。
1.2 配置步骤
-
解压到无中文路径 :如
D:\Tools\apache-maven-3.8.6
。 -
设置环境变量:
-
MAVEN_HOME:Maven解压目录。
-
Path :添加
%MAVEN_HOME%\bin
。
-
-
验证安装:
bash
mvn -v
# 输出示例:Apache Maven 3.8.6 ... Java version: 17.0.5
2. 创建第一个Maven项目
2.1 项目结构
Maven强制约定目录结构,确保标准化:
bash
Hello
├── src
│ ├── main
│ │ ├── java # Java源代码
│ │ └── resources # 配置文件(如log4j.properties)
│ └── test
│ ├── java # 测试代码
│ └── resources # 测试配置
├── target # 构建输出(编译后的类、JAR包)
└── pom.xml # 项目对象模型(核心配置文件)
2.2 编写POM文件
XML
<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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.tx.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Hello</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2.3 编写代码与测试
(1)主类:在src/main/java/cn/tx/maven目录下新建文件Hello.java
java
package cn.tx.maven;
public class Hello {
public String sayHello(String name){
return "Hello "+name+"!";
}
}
(2)测试类:在/src/test/java/cn/tx/maven目录下新建测试文件HelloTest.java
java
package cn.tx.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {
@Test
public void testHello(){
Hello hello = new Hello();
String results = hello.sayHello("maven");
assertEquals("Hello maven!",results);
}
}
2.4 构建与运行
- 打开cmd命令行,进入Hello项目根目录执行 mvn compile命令,查看根目录变化
- cmd 中继续录入mvn clean命令,然后再次查看根目录变化
- cmd 中录入mvn clean compile命令, 查看根目录变化
- cmd 中录入 mvn clean test命令,查看根目录变化
- cmd 中录入 mvn clean package命令,查看根目录变化
- cmd 中录入 mvn clean install 查看仓库会把项目安装到仓库里
3. M aven 的第二个项目
3.1 项目结构
bash
HelloFriend
├── src
│ ├── main
│ │ ├── java # Java源代码
│ │ └── resources # 配置文件(如log4j.properties)
│ └── test
│ ├── java # 测试代码
│ └── resources # 测试配置
├── target # 构建输出(编译后的类、JAR包)
└── pom.xml # 项目对象模型(核心配置文件)
3.2 编写POM文件
XML
<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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.tx.maven</groupId>
<artifactId>HelloFriend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>HelloFriend</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.tx.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
3.3 编写代码与测试
(1)主类:在src/main/java/cn/tx/maven目录下新建文件HelloFriend.java
java
package cn.tx.maven;
import cn.tx.maven.Hello;
public class HelloFriend {
public String sayHelloToFriend(String name){
Hello hello = new Hello();
String str = hello.sayHello(name)+" I am "+this.getMyName();
System.out.println(str);
return str;
}
public String getMyName(){
return "John";
}
}
(2)测试类:在/src/test/java/cn/tx/maven目录下新建测试文件HelloFriendTest.java
java
package cn.tx.maven;
import static junit.framework.Assert.assertEquals;
import org.junit.Test;
import cn.tx.maven.Hello;
public class HelloFriendTest {
@Test
public void tesHelloFriend(){
HelloFriend helloFriend = new HelloFriend();
String results = helloFriend.sayHelloToFriend("zhangsan");
assertEquals("Hello zhangsan! I am John",results);
}
}
3.4 测试打包HelloFriend项目
在HelloFriend目录下执行命令mvn package。

四、常见问题与解决方案
-
依赖下载失败:
-
检查镜像配置 :确保
settings.xml
中配置了可靠的镜像源(如阿里云)。 -
清理本地仓库 :删除
~/.m2/repository
中损坏的依赖目录,重新下载。
-
-
构建时报错"找不到符号":
-
检查JDK版本:确保POM中配置的JDK版本与环境一致。
-
重新编译 :执行
mvn clean compile
。
-
-
插件兼容性问题:
- 更新插件版本 :在Maven中央仓库查找最新版本。
五、总结
Maven通过标准化构建流程 和自动化依赖管理,极大提升了Java项目的开发效率与协作能力。从安装配置到创建第一个项目,再到管理复杂依赖,Maven始终是开发者不可或缺的工具。