一、Maven 是什么?

Apache Maven 是一个强大的项目管理和构建自动化工具。基于项目对象模型(POM, Project Object Model) 的概念,通过一小段描述信息(一个 pom.xml 文件)来管理项目的构建、报告和文档.

  • 依赖管家:自动下载和管理项目所需的第三方库(JAR 包)。

  • 构建工程师:一键完成编译、测试、打包、部署等一系列繁琐的构建过程。

  • 项目规范员:提供了一种标准的项目结构和构建生命周期,让所有项目都“长得一样”,降低了学习和切换的成本。

  • 约定大于配置(Convention over Configuration)

👉 Maven 就是一个 管理 jar 包依赖、自动化构建和项目生命周期的工具


二、Maven 有什么作用?(核心功能)

  1. 依赖管理 (Dependency Management) - 最核心的作用

    • 自动下载jar包:只需在 pom.xml 中声明需要什么库(例如 junitspring-core),Maven 会自动从远程仓库(如 Maven Central)下载这些库及其传递性依赖(即依赖的库所依赖的其他库)。

    • 解决依赖冲突:Maven 能处理复杂的依赖关系,避免版本冲突。

  2. 标准化构建生命周期 (Build Lifecycle)

    • Maven 预设了三套标准的生命周期:cleandefault (或 build), site

    • 每个生命周期包含一系列阶段(phase),如 compiletestpackageinstalldeploy

    • 只需要执行一个命令(如 mvn package),Maven 就会自动按顺序执行该命令之前的所有阶段,完成整个构建流程。

  3. 项目信息管理

    • 通过 pom.xml 统一管理项目描述、开发者信息、版本、许可证等元数据。

    • 可以方便地生成项目站点和文档。

  4. 统一的项目结构

    • Maven 约定了一个标准的目录结构。所有使用 Maven 的项目都遵循同样的布局,这让开发者能立即熟悉任何 Maven 项目。


三、Maven 怎么使用?(基本使用)

1. 安装 Maven
  1. 前往 Maven 官网 下载二进制压缩包。

  2. 解压到本地目录。

  3. 配置环境变量:

    • M2_HOME:指向的 Maven 解压目录。

    • 将 %M2_HOME%\bin 添加到 PATH 环境变量中。

  4. 打开命令行,输入 mvn -v,如果显示 Maven 版本信息,则表示安装成功。

2. 核心命令(在项目根目录下执行)

Maven 的命令格式是 mvn [plugin-name]:[goal],但更常用的是生命周期阶段命令。

命令 作用 说明
mvn compile 编译 编译项目主代码,生成 target/classes 目录。
mvn test 运行测试 运行所有测试用例,使用 Surefire 插件。
mvn package 打包 将编译后的代码打包成可分发格式,如 JAR, WAR。
mvn install 安装到本地仓库 将打好的包安装到本地 Maven 仓库(~/.m2/repository),供其他本地项目依赖。
mvn clean 清理 删除 target 目录,清除上次构建的结果。
mvn clean package 组合命令 先清理,再打包。非常常用。
mvn clean install 组合命令 先清理,再打包,最后安装到本地仓库。
mvn dependency:tree 查看依赖树 显示项目的全部依赖关系,用于排查依赖冲突。
mvn spring-boot:run 运行Spring Boot应用 使用 spring-boot-maven-plugin 运行应用。

执行流程:当运行 mvn install 时,Maven 会按顺序执行生命周期中的所有阶段直到 install
validate -> compile -> test -> package -> verify -> install


四、Maven 文件目录结构介绍

Maven 使用约定优于配置的原则,定义了严格的标准目录结构。这样做的好处是,看到目录结构就知道它是 Maven 项目。

一个标准的 Maven 项目目录如下所示:

my-app/                    <!-- 项目根目录 -->
├── pom.xml               <!-- Maven 项目的核心配置文件 -->
├── src                   <!-- 源代码目录 -->
│   ├── main              <!-- 主代码目录 -->
│   │   ├── java          <!-- Java 源代码(包结构在此之下) -->
│   │   │   └── com
│   │   │       └── mycompany
│   │   │           └── app
│   │   │               └── App.java
│   │   └── resources     <!-- 资源文件(配置文件、图片等) -->
│   │       └── application.properties
│   └── test              <!-- 测试代码目录 -->
│       ├── java          <!-- 测试用的 Java 源代码 -->
│       │   └── com
│       │       └── mycompany
│       │           └── app
│       │               └── AppTest.java
│       └── resources     <!-- 测试用的资源文件 -->
└── target                <!-- 构建输出目录(由 Maven 自动生成) -->
    ├── classes           <!-- 编译后的 .class 文件 -->
    ├── test-classes      <!-- 编译后的测试类 -->
    ├── my-app-0.0.1.jar  <!-- 打包生成的 JAR 文件 -->
    └── surefire-reports  <!-- 测试报告 -->
核心目录说明:
  • pom.xml:项目的“大脑”,所有配置和依赖都在这里定义。

  • src/main/java:存放项目主要的 Java 源代码。

  • src/main/resources:存放项目主要的资源文件,如 Spring 的 applicationContext.xmlmybatis-config.xml.properties 配置文件等。这些文件会被复制到 target/classes 中。

  • src/test/java:存放测试用的 Java 代码(如 JUnit 测试用例)。

  • src/test/resources:存放测试用的资源文件。

  • target/由 Maven 自动创建,所有构建产生的内容(编译后的类、打包的 jar 包、测试报告等)都会放在这个目录里。执行 mvn clean 会删除此目录。


五、核心:

pom.xml 文件详解

pom.xml 是 Maven 项目的核心。一个最基本的 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 
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!-- 模型版本,固定为 4.0.0 -->
    <modelVersion>4.0.0</modelVersion>

    <!-- 项目坐标 (GAV) - 项目的唯一标识 -->
    <groupId>com.mycompany.app</groupId>  <!-- 公司或组织域名反写 -->
    <artifactId>my-app</artifactId>       <!-- 项目名 -->
    <version>1.0.0-SNAPSHOT</version>     <!-- 版本号 (SNAPSHOT 表示快照/开发版) -->
    <packaging>jar</packaging>            <!-- 打包方式 (jar, war, pom等) -->

    <!-- 项目属性 -->
    <properties>
        <maven.compiler.source>11</maven.compiler.source> <!-- Java 版本 -->
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!-- 项目依赖 -->
    <dependencies>
        <!-- 一个依赖项 -->
        <dependency>
            <groupId>junit</groupId>      <!-- 依赖的组ID -->
            <artifactId>junit</artifactId><!-- 依赖的项目ID -->
            <version>4.13.2</version>     <!-- 依赖的版本 -->
            <scope>test</scope>           <!-- 依赖的作用范围 (test: 只在测试时有效) -->
        </dependency>
        <!-- 可以添加更多依赖 -->
    </dependencies>

    <!-- 构建配置 -->
    <build>
        <plugins>
            <!-- 插件配置,例如配置 Spring Boot 的打包插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.7.0</version>
            </plugin>
        </plugins>
    </build>
</project>

总结

方面 描述
是什么 Java 项目的项目管理与构建自动化工具
核心作用 1. 依赖管理
2. 标准化构建
3. 统一项目结构
如何使用 通过命令行执行生命周期命令:mvn compilemvn testmvn package
核心文件 pom.xml:定义项目信息、依赖和构建配置。
核心目录 src/main/javasrc/main/resourcessrc/test/javatarget/
  • 通过 统一的目录结构 + 插件机制 + 生命周期,让项目管理更高效

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐