Maven 的基本配置操作

在Java开发尤其是Web项目开发中,相信大家都经历过手动导入Jar包、项目目录混乱、不同开发工具项目无法互通、打包部署繁琐等痛点。而 Maven 作为Apache旗下开源的项目管理与构建工具,完美解决了这些问题。今天这篇文章,带你从零吃透Maven核心知识,包含完整安装配置、IDEA集成、依赖管理、生命周期、单元测试等全套实战内容。

一、初识Maven:它到底是什么?

1. 什么是Maven

Maven 是Apache基金会推出的Java项目管理和构建工具,也是目前Java生态中主流的项目构建标准。Apache作为全球最大的开源软件基金会,成立于1999年,旗下众多优秀框架都依托Maven进行项目管理。

2. 为什么一定要用Maven?

在没有Maven的传统Java项目中,开发会遇到三大核心难题,而Maven针对性给出了解决方案:

  1. 依赖管理

    传统方式:手动去官网下载Jar包,复制到项目lib目录,版本混乱、冲突频发。

    Maven方式:仅需在配置文件中编写一段坐标配置,自动下载、管理所有依赖Jar包,彻底解决版本冲突。

  2. 标准化项目构建

    项目开发完成后,编译、测试、打包、发布是必备流程。传统方式需要手动一步步操作,跨Windows、Linux、Mac系统还会出现兼容问题。

    Maven提供跨平台统一命令,一行命令即可完成全流程构建,全系统通用。

  3. 统一项目目录结构

    Eclipse、MyEclipse、IDEA等不同开发工具创建的Java项目,目录结构各不相同,项目无法直接互通。

    Maven定义了全球统一的项目目录规范,无论使用哪种IDE,Maven项目结构完全一致,项目迁移、协作毫无障碍。

一句话总结:Maven = Java项目的依赖管家 + 自动化构建工具 + 目录标准化规范。

二、Maven核心三大模型

Maven的底层设计围绕三大模型展开,也是理解Maven的核心:项目对象模型(POM)、依赖管理模型、构建生命周期模型

1. 项目对象模型(POM)

POM(Project Object Model)即项目对象模型,pom.xml 就是POM的载体。它将整个Java项目抽象为一个对象,通过坐标唯一标识项目。

Maven坐标三要素(缺一不可)

  • groupId:项目所属组织,一般使用域名反写 ,例如com.itheima
  • artifactId:项目/模块名称,比如maven-project01
  • version:项目版本号,分为两类:
    • SNAPSHOT:快照版本,开发中不稳定版本;
    • RELEASE:正式版本,稳定可上线版本。

基础pom.xml示例:

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">
    <!-- POM模型版本,固定4.0.0 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 项目坐标 -->
    <groupId>com.itheima</groupId>
    <artifactId>maven-project01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 打包方式,默认jar,Web项目常用war -->
    <packaging>jar</packaging>
</project>

2. 依赖管理模型

该模型依托坐标管理项目所有第三方Jar包,也就是我们常说的依赖 ,使用坐标来描述当前项目依赖哪些第三方jar包。我们只需在pom.xml中写入依赖坐标,Maven就会自动引入对应Jar包,同时支持依赖传递、排除依赖 等高级功能。

3. 构建生命周期模型

Maven把项目构建流程抽象为固定生命周期,每个阶段对应专属插件完成工作。整个构建流程标准化、自动化,无需人工干预。

三、Maven仓库:Jar包的存储中心

Maven所有依赖Jar包都存放在仓库中,仓库本质就是文件夹,分为三类,Jar包查找有固定优先级:

  1. 本地仓库

    存放在个人电脑本地的文件夹,优先从这里读取Jar包,速度最快。

  2. 远程仓库(私服)

    企业/团队内部搭建的私有仓库,存放公司内部依赖、私有Jar包。查找优先级:本地仓库 → 私服

  3. 中央仓库

    Maven官方维护的全球公共仓库,包含绝大多数开源Jar包。若本地、私服都没有,会从中央仓库下载。

查找顺序总结:本地仓库 → 远程私服 → 中央仓库

四、Maven 详细安装与全局配置

1. 下载安装包

官方下载地址:https://maven.apache.org/download.cgi

推荐稳定版本:apache-maven-3.9.4 ,选择 Binary zip archive 压缩包下载。

2. 解压安装

Maven 解压即安装,有两点注意事项:

  1. 解压路径不要包含中文、空格、特殊字符
  2. 示例解压目录:D:\develop\apache-maven-3.9.4

解压后核心目录说明:

  • bin:存放mvn执行命令,核心目录;
  • conf:配置文件目录,重点修改 settings.xml
  • lib:Maven自身运行依赖的Jar包。

3. 核心配置(修改 conf/settings.xml)

进入 Maven 根目录下的 conf 文件夹,用记事本/Notepad++ 打开 settings.xml,依次完成以下4项配置。

(1)配置本地仓库

本地仓库用于存放所有下载的Jar包,自定义目录即可。

  1. 在Maven同级目录新建文件夹,示例:D:\develop\apache-maven-3.9.4\mvn_repo
  2. settings.xml 中找到被注释的 <localRepository> 标签;
  3. 复制标签到注释外,修改为你的本地仓库绝对路径:
xml 复制代码
<!-- 本地仓库路径 -->
<localRepository>D:\develop\apache-maven-3.9.4\mvn_repo</localRepository>
(2)配置阿里云镜像(加速下载)

Maven官方中央仓库在国外,下载速度极慢,配置阿里云镜像 作为国内镜像源。

settings.xml<mirrors> 标签组内,添加如下镜像配置:

xml 复制代码
<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
(3)全局统一JDK版本

统一Maven项目编译使用的JDK版本(示例为 JDK21,可根据自身版本修改)。

settings.xml<profiles> 标签内添加如下配置:

xml 复制代码
<profile>
    <id>jdk-21</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>21</jdk>
    </activation>
    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <maven.compiler.compilerVersion>21</maven.compiler.compilerVersion>
    </properties>
</profile>

配置完成后,所有Maven项目默认使用JDK21编译。

4. 配置系统环境变量

参照JDK环境变量配置方式,配置Maven环境变量:

  1. 新建系统变量

    变量名:MAVEN_HOME

    变量值:Maven解压根目录 D:\develop\apache-maven-3.9.4

  2. 编辑Path系统变量

    在Path中新增一条:%MAVEN_HOME%\bin

  3. 验证安装是否成功

    打开 CMD / Windows PowerShell,输入命令:

    bash 复制代码
    mvn -v

    若正常输出版本号、JDK信息,代表 Maven 安装+配置全部完成。

五、IDEA 集成 Maven 实战

日常开发我们都在IDEA中使用Maven,分为全局配置创建项目导入已有项目三部分。

1. IDEA 全局配置Maven

  1. 关闭所有项目,进入IDEA欢迎页,打开 All settings
  2. 依次选择 Build,Execution,Deployment → Build Tools → Maven
  3. 核心三项配置:
    • Maven home path:选择本地 Maven 解压目录;
    • User settings file:勾选并选中我们修改后的 settings.xml
    • Local repository:自动识别本地仓库路径,无需手动修改;
  4. 配置Java编译版本:进入 Build,Execution,Deployment → Compiler → Java Compiler,设置项目字节码版本为对应JDK版本。


2. 创建Maven项目

  1. 新建空项目,再右键新建 Maven模块
  2. 语言选择Java,构建工具选择Maven,绑定本地已配置的JDK;
  3. 填写坐标 groupIdartifactIdversion,完成创建。

Maven标准目录结构(强制规范)

复制代码
maven-project
├─ src
│  ├─ main          # 源代码目录
│  │  ├─ java       # Java源码
│  │  └─ resources  # 配置文件
│  └─ test          # 测试代码目录
│     ├─ java       # 测试Java代码
│     └─ resources  # 测试配置文件
├─ target           # 编译、打包后自动生成的文件(可删除)
└─ pom.xml          # Maven核心配置文件

编写测试代码运行:

java 复制代码
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello Maven ...");
    }
}

3. 导入已有Maven项目

两种常用方式:

  1. File → Project Structure → Modules → Import Module,选择项目中的pom.xml导入;
  2. 打开右侧Maven面板,点击+号,选中pom.xml添加项目。

若无Maven面板:View → Appearance → Tool Window Bars 调出。

六、Maven依赖管理:核心功能精讲

1. 引入依赖

pom.xml<dependencies>标签内,通过坐标引入第三方Jar包,示例(引入commons-io):

xml 复制代码
<dependencies>
    <!-- 依赖 : commons-io -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.11.0</version>
    </dependency>
</dependencies>

编写完成后,点击IDEA Maven面板刷新按钮,自动下载依赖。

找不到依赖坐标?可访问 https://mvnrepository.com/ 搜索获取;也可使用 IDEA 快捷键 Alt+Insert 快速搜索添加依赖。

2. 依赖传递

Maven自带依赖传递特性 :A依赖B,B依赖C,那么A会自动间接依赖C。

优势:无需手动引入多层依赖,简化配置。

  • 直接依赖:项目中主动配置的依赖;
  • 间接依赖:由传递机制自动引入的依赖。

3. 排除依赖

如果不想传递引入某个依赖,使用<exclusions>主动排除,示例:

xml 复制代码
<dependency>
    <groupId>com.itheima</groupId>
    <artifactId>maven-projectB</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 排除junit依赖 -->
    <exclusions>
        <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4. 依赖范围(scope)

通过<scope>限制依赖的生效范围,常用取值:

scope 值 主程序(main) 测试程序(test) 参与打包 适用场景
compile(默认) 有效 有效 参与 通用核心依赖(如日志包)
test 无效 有效 不参与 单元测试框架(JUnit)
provided 有效 有效 不参与 服务端原生API(servlet-api)
runtime 无效 有效 参与 数据库驱动包

示例(JUnit指定测试范围):

xml 复制代码
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.9.1</version>
    <scope>test</scope>
</dependency>

七、Maven 生命周期与命令

Maven分为三套相互独立的生命周期,覆盖项目全流程:

  1. clean 生命周期 :清理,删除target目录;
  2. default 生命周期(核心):编译、测试、打包、安装、部署;
  3. site 生命周期:生成项目报告、发布站点(日常开发少用)。

1. 常用生命周期阶段&命令

命令/阶段 作用
clean 清空上次构建产物
compile 编译main目录下的源代码
test 执行test目录下的单元测试
package 编译+测试+打包(jar/war包)
install 打包后,将项目安装到本地仓库

核心规则 :执行后续阶段,会自动执行前面所有阶段(同生命周期内)。

例:执行package,会自动执行compiletestclean属于独立生命周期,不会被连带执行。

2. 两种执行方式

  1. IDEA可视化操作:右侧Maven面板,双击对应生命周期即可;
  2. 命令行操作 :进入项目根目录,执行 mvn 阶段名,如 mvn clean package

八、Maven + JUnit 单元测试实战

传统main方法测试代码耦合高、无法自动化,Maven搭配JUnit实现专业单元测试。

1. JUnit 常用注解

注解 作用
@Test 标记当前方法为测试方法
@BeforeEach 每个测试方法执行前运行(初始化)
@AfterEach 每个测试方法执行后运行(资源释放)
@BeforeAll 所有测试方法执行前运行一次(静态方法)
@AfterAll 所有测试方法执行后运行一次(静态方法)
@DisplayName 自定义测试类/方法展示名称
@ParameterizedTest 参数化测试

2. 常用断言

断言用于校验代码执行结果是否符合预期,测试核心工具:

  • assertEquals(预期值, 实际值):判断值相等;
  • assertTrue(布尔条件):判断条件为true;
  • assertNull(对象):判断对象为空;
  • assertNotNull(对象):判断对象非空。

3. 测试代码示例

java 复制代码
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import static org.junit.jupiter.api.Assertions.assertEquals;

@DisplayName("用户业务测试")
public class UserServiceTest {

    @BeforeAll
    public static void init(){
        System.out.println("全局初始化");
    }

    @Test
    @DisplayName("测试获取年龄")
    public void testGetAge(){
        Integer age = 18;
        assertEquals(18, age, "年龄校验失败");
    }

    @AfterAll
    public static void close(){
        System.out.println("全局资源释放");
    }
}

运行测试:绿色代表测试通过,红色代表测试失败并抛出异常。

九、Maven 常见问题解决方案

问题:依赖报红、Jar包下载不完整

现象 :Maven面板依赖标红,刷新后依旧无法下载Jar包。

原因 :网络中断导致下载半成品,仓库中生成了.lastUpdated缓存文件,Maven不会重新下载。

解决方案

  1. 进入本地仓库目录,删除所有 .lastUpdated 后缀文件
  2. 命令行批量删除(推荐):在仓库目录执行 del /s *.lastUpdated
  3. 刷新IDEA Maven依赖,若仍报红,重启IDEA即可。
相关推荐
夕除1 小时前
Spring Security 配置类(SecurityConfig)
java·后端·spring
weixin199701080161 小时前
[特殊字符] 1688开放平台API Sign签名算法详解(Java / Python / PHP 实现)
java·python·算法
武子康1 小时前
Java-22 深入浅出 MyBatis - 手写ORM框架3 手写SqlSession、Executor 工作原理
java·后端
未若君雅裁1 小时前
JVM 垃圾回收算法与分代回收机制
java·jvm·算法
摇滚侠2 小时前
SpringMVC 入门到实战 简介和入门案例 01-13
java·后端·spring·intellij-idea
未若君雅裁2 小时前
JVM 垃圾回收器全景与G1深度解析
java·开发语言·jvm
霸道流氓气质2 小时前
Java 大数据量异步处理方案:线程池 vs 消息队列
java·开发语言
devilnumber2 小时前
想真正吃透 + 灵活运用 Java 代理模式
java·开发语言·代理模式
蝎子莱莱爱打怪2 小时前
自用推荐|XTerminal:我心中 SSH 客户端的终极形态
java·后端·程序员