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 生命周期(三套)

  1. default(构建核心)
  • validate → compile → test → package → verify → install → deploy
  1. clean
  • pre-clean → clean → post-clean
  1. 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 集成教程?告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注