云计算百科
云计算领域专业知识百科平台

CSDN 博客:Maven 从入门到实战(坐标 / 依赖 / 生命周期 / JUnit 单元测试 / 踩坑大全)

一、前言

Maven 是 Java 项目主流构建工具,解决传统项目 jar 包管理混乱、项目结构不统一、编译打包部署繁琐等痛点。本文完整梳理 Maven 核心知识点,包含基础概念、IDEA 实操、依赖管理、生命周期、JUnit5 单元测试、常见问题解决方案,适合 Java 后端开发者入门学习。

二、Maven 核心三大作用

  • 依赖管理 自动管理项目所需 jar 包,不用手动复制 jar,通过坐标引入依赖,解决 jar 包冲突问题。
  • 项目构建 提供标准化构建流程:编译 → 测试 → 打包 → 发布,一套命令完成项目构建。
  • 统一项目目录结构 所有 Maven 项目遵循同一套目录规范,不受开发工具(IDEA/Eclipse)限制。
  • 三、Maven 仓库体系

    仓库分类(依赖查找顺序)

  • 本地仓库:本机电脑文件夹,优先查找;
  • 远程仓库(私服):企业内部仓库;
  • 中央仓库:Maven 官方仓库,网络拉取依赖。
  • 查找规则:本地仓库 → 私服 → 中央仓库

    四、Maven 坐标(GAV)

    坐标是 jar 包唯一标识,用于定位依赖,在pom.xml中定义

    <groupId>组织/公司域名</groupId>
    <artifactId>项目/模块名称</artifactId>
    <version>版本号</version>

    • SNAPSHOT:快照版本,开发中持续更新;
    • RELEASE:正式稳定版本,可以对外发布。

    五、IDEA Maven 项目操作

    1. 创建 Maven 模块

    New Module → 选择 Maven → 设置 GAV 坐标,完成创建。

    2. 导入已有 Maven 项目

    两种方式:

  • File -> Project Structure -> Modules -> Import Module,选中pom.xml
  • Maven 侧边栏 → Add Maven Project,选择项目pom.xml
  • 六、依赖管理详解

    1. 引入依赖

    在dependencies标签内添加 dependency,填写 GAV 坐标:

    <dependency>
    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <version>xxx</version>
    <exclusions>
    <exclusion>
    <groupId>冲突包groupId</groupId>
    <artifactId>冲突包artifactId</artifactId>
    </exclusion>
    </exclusions>
    </dependency>

    2. 排除依赖(解决 jar 冲突)

    当依赖传递引入不需要的包,使用exclusions排除:

    <dependencies>
    <dependency>
    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <version>xxx</version>
    </dependency>
    </dependencies>

    3. 依赖范围 scope

    通过<scope>控制依赖生效范围:

    scopemain 源码test 测试打包后
    compile(默认)
    test
    provided
    runtime

    示例:JUnit 测试依赖一般设置<scope>test</scope>

    七、Maven 生命周期

    Maven 内置三套独立生命周期:

  • clean 生命周期:清理项目,删除 target 目录
    • pre-clean → clean → post-clean
  • default(核心构建生命周期):编译、测试、打包、安装
    • validate → compile → test → package → install → deploy

    执行后续阶段,会自动执行前面所有阶段;例如执行package,会自动执行 compile、test

  • site 生命周期:生成项目站点文档
  • 常用命令: mvn clean、mvn compile、mvn test、mvn package、mvn install

    八、JUnit5 单元测试实战

    1. 引入依赖

    <dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.9.1</version>
    <scope>test</scope>
    </dependency>

    2. 基础注解

    注解作用
    @Test 标识普通测试方法
    @ParameterizedTest 参数化测试
    @ValueSource 为参数化测试提供数据
    @DisplayName 修改测试类 / 方法展示名称
    @BeforeEach 每个测试方法执行前运行
    @AfterEach 每个测试方法执行后运行
    @BeforeAll 所有测试方法运行前执行(static)
    @AfterAll 所有测试方法运行结束执行(static)

    3. Assertions 断言(核心)

    单元测试不能只看不报异常,必须使用断言校验结果。 常用断言方法:

    Assertions.assertEquals(预期值,实际值,"错误提示");
    Assertions.assertNull(obj);
    Assertions.assertNotNull(obj);
    Assertions.assertTrue(条件);
    Assertions.assertThrows(异常类,() -> {}); // 断言抛出指定异常

    4. 企业开发规范

    • 测试代码统一放在src/test/java,不要写在 main 目录;
    • 测试类命名规范:业务类名+Test;
    • 测试方法必须public void;
    • 覆盖正常场景、边界值、异常场景。

    九、Maven 常见问题解决方案

    问题:依赖下载失败,报 lastUpdated 错误

    原因:网络异常中断下载,本地生成.lastUpdated锁文件,不会自动重试。 解决步骤:

  • 删除本地仓库所有.lastUpdated文件;
  • IDEA 重新刷新 Maven 依赖;
  • 配置阿里云 Maven 镜像加速下载。
  • 💡小技巧:删除文件后依然异常,重启 IDEA。

    十、文末总结

  • Maven 核心:依赖管理 + 标准化项目构建;
  • GAV 坐标定位 jar 包,scope 控制依赖生效范围;
  • 生命周期阶段顺序执行,高级阶段自动执行前置阶段;
  • JUnit 单元测试必须配合断言,不能单纯运行方法;
  • 依赖冲突优先使用 exclusions 排除传递依赖。
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » CSDN 博客:Maven 从入门到实战(坐标 / 依赖 / 生命周期 / JUnit 单元测试 / 踩坑大全)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!