Maven从入门到精通

  • 学习目标
  • ✅ Maven 简介(重点)
  • ✅ Maven 安装(操作)
  • ✅ Idea 集成 Maven(操作)
  • ✅ 创建 Maven 工程(重点)
  • ✅ 生命周期(重点)
  • ✅ 依赖管理(重点)
  • ❗ 拆分与聚合(难点)
  • ℹ️ 私服(了解)

前言

在 Java 开发中,项目构建和依赖管理是核心环节。传统的项目构建方式需要手动管理大量 Jar 包,效率低下且易出错。Maven 作为 Apache 旗下的开源项目管理工具,能一站式解决依赖管理和项目构建问题,是 Java 开发者必备的核心技能。本文从基础到进阶,全面讲解 Maven 的使用,涵盖安装、集成、生命周期、依赖管理、工程拆分聚合及私服等核心知识点。


1. Maven 简介

1.1 为什么要使用 Maven?

传统 Web 项目构建方式

传统项目中使用 Jar 包,需要手动复制到项目的lib目录,存在以下问题:

  • Jar 包重复冗余,占用存储空间
  • 版本不一致易引发兼容性问题
  • 手动管理繁琐,效率低下

Maven 构建方式

Maven 项目中无本地 Jar 包,通过统一的依赖配置管理 Jar 包,优势如下:

  • 统一管理 Jar 包版本,避免冲突
  • 自动下载依赖,无需手动复制
  • 标准化项目构建流程(编译、测试、打包、部署)

1.2 Maven 是什么?

Maven [ˈmeɪvn] 是 Apache 开源的项目管理工具,核心两大功能:

  • 依赖管理:对 Jar 包进行统一的版本、依赖关系管理
  • 项目管理:自动化完成项目编译、测试、打包、部署等全流程

1.3 Maven 的基本概念

1.3.1 仓库

Maven 的仓库用于存储 Jar 包、插件等构件,分为三类:

仓库类型 说明
本地仓库 本地电脑存储 Jar 包的目录,默认路径:${user.home}/.m2/repository
私服 企业内部搭建的私有仓库,供团队共享依赖
中央仓库 Maven 官方维护的公共仓库,包含几乎所有开源 Jar 包

1.3.2 坐标

坐标是 Maven 定位 Jar 包的唯一标识,通过 3 个核心维度确定 Jar 包位置:

  • groupId:公司 / 组织标识(如org.mybatis
  • artifactId:项目标识(如mybatis
  • version:版本号(如3.4.5

示例(MyBatis 依赖坐标):

java 复制代码
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>

2. Maven 安装

2.1 下载

官网地址:http://maven.apache.org/选择对应系统的压缩包(建议下载 3.6.x 版本,兼容性更好)。

2.2 解压

将下载的压缩包解压到无中文、无空格的路径下,解压后目录结构:

  • bin:脚本命令(如 mvn.cmd)
  • boot:Maven 引导程序(类加载器等)
  • conf:配置文件(核心:settings.xml)
  • lib:Maven 运行依赖的 Jar 包

2.3 配置环境变量

Maven 基于 Java 开发,需先安装 JDK 并配置环境变量,再配置 Maven:

步骤 1:配置 MAVEN_HOME
  • 新建系统环境变量 MAVEN_HOME,值为 Maven 解压根路径(如D:\apache-maven-3.6.3
步骤 2:配置 Path
  • 在系统环境变量Path中添加:%MAVEN_HOME%\bin
步骤 3:验证安装

打开 CMD 命令行,执行:

mvn --version

若输出 Maven 版本、JDK 版本等信息,说明安装成功。

2.4 配置阿里云镜像仓库

Maven 中央仓库在国外,下载速度慢,需配置阿里云镜像加速:

编辑conf/settings.xml,在<mirrors>标签内添加:

java 复制代码
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

2.5 配置本地仓库路径

默认本地仓库在 C 盘,建议修改到其他盘符:

编辑conf/settings.xml,找到<localRepository>标签,修改为自定义路径:

java 复制代码
<!-- 注释默认路径,添加自定义路径 -->
<localRepository>D:\mvn_repository</localRepository>

3. IDEA 集成 Maven

3.1 配置 Maven

打开 IDEA,进入设置:File | Settings | Build, Execution, Deployment | Build Tools | Maven

  • Maven home path:选择 Maven 解压根路径
  • User settings file:选择conf/settings.xml(勾选 Override)
  • Local repository:自动同步 settings.xml 中的配置

3.2 设置自动导入依赖

默认情况下,修改pom.xml后需手动刷新依赖,配置自动导入可提升效率:

步骤 1:打开自动重载设置(可能导致卡顿)

点击 IDEA 中Auto-Reload Settings...(或在设置中搜索Auto Import

步骤 2:勾选自动重载

选择Any changes(检测到 pom.xml 变动时自动导入依赖)

4. 创建 Maven 工程

4.1 新建 Maven 工程

步骤 1:选择 Maven 模板
  • 打开 IDEA → 新建 Project → 选择 Maven → 不勾选模板(纯 Java 项目)
步骤 2:配置工程信息
  • GroupId:公司标识(如com.hg
  • ArtifactId:工程名(如maven-demo
  • Version:版本号(默认1.0-SNAPSHOT
步骤 3:选择工程存储路径

确认路径无中文、无空格,完成创建。

4.2 Maven 工程目录结构

标准 Maven 工程目录如下:

java 复制代码
src
├── main
│   ├── java        # 主程序Java源码
│   └── resources   # 配置文件(如mybatis-config.xml)
└── test
    ├── java        # 测试程序Java源码
    └── resources   # 测试配置文件
pom.xml             # Maven核心配置文件

4.3 添加依赖(以 JUnit 为例)

步骤 1:查找依赖坐标

打开Maven 仓库官网,搜索JUnit,选择对应版本(如 4.12),复制坐标。

步骤 2:配置 pom.xml

<dependencies>标签内添加:

java 复制代码
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
步骤 3:编写测试类验证
java 复制代码
import org.junit.Test;

public class DemoTest {
    @Test
    public void test(){
        System.out.println("hello,maven!");
    }
}

运行测试方法,控制台输出内容说明依赖导入成功。

5. Maven 生命周期

5.1 常用命令

Maven 命令需在pom.xml同级目录执行,核心命令如下:

命令 说明
mvn clean 清理项目,删除 target 目录
mvn compile 编译 main 目录下的 Java 文件为 class 文件
mvn test 执行 test 目录下的测试代码
mvn package 将项目打包(Jar/War)到 target 目录
mvn install 打包并安装到本地仓库
mvn deploy 打包并部署到远程仓库(私服)

5.2 三套生命周期

Maven 包含三套相互独立的生命周期,执行后续命令时,前置命令会自动执行:

  1. 清理生命周期clean(清理项目)
  2. 默认生命周期compile → test → package → install → deploy(核心构建流程)
  3. 站点生命周期site(生成项目文档站点)

未完待续......

如果本文对你有帮助,欢迎点赞、收藏、关注~

相关推荐
JMchen1232 小时前
跨平台相机方案深度对比:CameraX vs. Flutter Camera vs. React Native
java·经验分享·数码相机·flutter·react native·kotlin·dart
day day day ...2 小时前
easyExcel和poi分别处理不同标准的excel
java·服务器·excel
hgz07102 小时前
堆内存分区
java·开发语言·jvm
索荣荣2 小时前
SpringBoot Starter终极指南:从入门到精通
java·开发语言·springboot
独断万古他化2 小时前
【Spring 事务】事务隔离级别与事务传播机制:从理论到业务落地实操
java·后端·spring·事务隔离·事务传播
苏涵.2 小时前
三种工厂设计模式
java
嗯嗯**2 小时前
Neo4j学习3:Java连接图库并执行CQL
java·学习·spring·neo4j·图数据库·驱动·cql
洛阳纸贵2 小时前
JAVA高级工程师--Springboot集成ES、MySQL同步ES的方案、ES分片副本、文档及分片规划
java·spring boot·elasticsearch
阿猿收手吧!2 小时前
【C++】C++原子类型隐式转换解析
java·c++