Maven 教程
Maven 教程(中文版)
Apache Maven 是一个强大的 Java 项目构建和管理工具,它基于 POM(Project Object Model) 概念,通过一个简单的 pom.xml 文件即可管理项目的构建、依赖、测试、打包和发布等整个生命周期。
一、Maven 简介
| 特性 | 说明 |
|---|---|
| 约定优于配置 | 遵循标准目录结构,减少配置 |
| 依赖管理 | 自动下载依赖 JAR 及传递性依赖 |
| 构建生命周期 | 标准化构建过程(编译、测试、打包等) |
| 插件系统 | 丰富的插件支持各种任务 |
| 中央仓库 | 访问 Maven 中央仓库 |
二、安装 Maven
1. 下载
官网:https://maven.apache.org/download.cgi
下载最新版 apache-maven-x.x.x-bin.zip
2. 解压
unzip apache-maven-x.x.x-bin.zip
# 或 Windows 直接解压
3. 配置环境变量
Linux/macOS
export M2_HOME=/path/to/apache-maven-x.x.x
export PATH=$M2_HOME/bin:$PATH
Windows
- 右键“此电脑” → 属性 → 高级系统设置 → 环境变量
- 新建
M2_HOME=D:\maven\apache-maven-x.x.x Path中添加%M2_HOME%\bin
4. 验证安装
mvn -version
输出类似:
Apache Maven 3.9.9
Java version: 17.0.12, vendor: Oracle Corporation
三、Maven 目录结构(约定)
myproject/
├── pom.xml
├── src/
│ ├── main/
│ │ ├── java/ # 主代码
│ │ ├── resources/ # 配置文件、静态资源
│ │ └── webapp/ # Web 项目(可选)
│ └── test/
│ ├── java/ # 单元测试
│ └── resources/ # 测试资源
└── target/ # 构建输出目录(自动生成)
四、创建第一个 Maven 项目
方法1:手动创建
mkdir hello-maven
cd hello-maven
创建目录结构:
mkdir -p src/main/java/com/example
mkdir -p src/main/resources
mkdir -p src/test/java/com/example
创建 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>
<groupId>com.example</groupId>
<artifactId>hello-maven</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- JUnit 5 测试依赖 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.3</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
创建主类:
// src/main/java/com/example/App.java
package com.example;
public class App {
public static void main(String[] args) {
System.out.println("Hello Maven!");
}
}
创建测试类:
// src/test/java/com/example/AppTest.java
package com.example;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class AppTest {
@Test
void testHello() {
assertTrue(true);
}
}
方法2:使用 Archetype 快速生成
mvn archetype:generate \
-DgroupId=com.example \
-DartifactId=hello-maven \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
推荐新手使用,自动生成标准结构。
五、常用 Maven 命令
| 命令 | 说明 |
|---|---|
mvn compile | 编译主代码 |
mvn test | 运行单元测试 |
mvn package | 打包成 JAR/WAR |
mvn clean | 删除 target/ 目录 |
mvn install | 安装到本地仓库 |
mvn dependency:tree | 查看依赖树 |
mvn clean package | 清理 + 打包 |
mvn site | 生成项目站点报告 |
六、POM.xml 核心元素详解
<project>
<modelVersion>4.0.0</modelVersion>
<!-- 坐标:唯一标识一个项目 -->
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<!-- 项目信息 -->
<name>My Application</name>
<description>示例项目</description>
<url>https://example.com</url>
<!-- 依赖管理 -->
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.2</version>
</dependency>
</dependencies>
<!-- 构建配置 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
</plugin>
</plugins>
</build>
</project>
七、依赖范围(scope)
| scope | 说明 |
|---|---|
compile | 默认,编译 + 测试 + 运行都需要 |
provided | 编译和测试需要,运行时由容器提供(如 servlet-api) |
runtime | 测试和运行需要,编译不需要(如 JDBC 驱动) |
test | 仅测试使用(如 JUnit) |
system | 类似 provided,但需手动提供本地 JAR(不推荐) |
八、Maven 生命周期(三套)
- default(构建核心)
- validate → compile → test → package → verify → install → deploy
- clean
- pre-clean → clean → post-clean
- site
- pre-site → site → post-site → site-deploy
运行
mvn package会自动执行前面的所有阶段。
九、配置镜像源(加速下载)
编辑 ~/.m2/settings.xml(没有就创建):
<settings>
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>
推荐使用阿里云或华为云镜像。
十、创建可执行 JAR(带依赖)
使用 maven-shade-plugin:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.0</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>shade</goal></goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.App</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
打包后:
java -jar target/hello-maven-1.0.0-shaded.jar
十一、多模块项目
parent-project/
├── pom.xml (packaging=pom)
├── module-a/
│ └── pom.xml
├── module-b/
│ └── pom.xml
父 POM:
<modules>
<module>module-a</module>
<module>module-b</module>
</modules>
子模块:
<parent>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0.0</version>
</parent>
十二、常用插件
| 插件 | 用途 |
|---|---|
maven-compiler-plugin | 设置 Java 版本 |
maven-surefire-plugin | 运行单元测试 |
maven-jar-plugin | 定制 JAR 包 |
maven-war-plugin | 打包 Web 项目 |
exec-maven-plugin | 运行主类 |
maven-assembly-plugin | 打包带依赖 |
十三、调试技巧
# 查看详细日志
mvn clean package -X
# 跳过测试
mvn package -DskipTests
# 只编译不测试
mvn compile -Dmaven.test.skip=true
# 查看依赖冲突
mvn dependency:analyze
十四、推荐学习资源
- 官方文档:https://maven.apache.org/guides/
- 《Maven 实战》书籍
- 阿里云镜像:https://maven.aliyun.com
- Maven 中央仓库:https://search.maven.org
十五、快速上手命令总结
# 1. 创建项目
mvn archetype:generate -DgroupId=com.mycompany -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
# 2. 进入项目
cd myapp
# 3. 编译
mvn compile
# 4. 运行测试
mvn test
# 5. 打包
mvn package
# 6. 运行程序
java -cp target/myapp-1.0.jar com.mycompany.App
恭喜!你已掌握 Maven 基础!
继续深入:多模块、Spring Boot 集成、CI/CD 部署…
需要 Spring Boot + Maven 示例 或 IDEA 集成教程?告诉我!