当前位置: 首页 > news >正文

Maven安装、IDEA集成Maven、依赖管理、单元测试

目录

  • Maven安装、IDEA集成Maven、依赖管理、单元测试
    • 一、认识Maven
      • 1.1 什么是Maven?
      • 1.2 Maven的作用
      • 1.3 Maven的结构
        • pom.xml文件
        • 仓库的作用和查找顺序
    • 二、安装Maven
      • 2.1 下载Maven
      • 2.2 配置本地仓库路径
      • 2.3 配置阿里云私服
      • 2.4 配置环境变量
    • 三、IDEA集成并创建Maven项目
      • 3.1 更改IDEA配置
        • 3.1.1 基本Maven配置
        • 3.1.2 配置JRE
        • 3.1.3 配置编译器版本
      • 3.2 创建Maven项目
      • 3.3 Maven坐标
        • 3.3.1 什么是坐标?
        • 3.3.2 坐标的组成部分
        • 3.3.3 版本分类
    • 四、依赖管理
      • 4.1 添加依赖的方式
      • 4.2 排除不要的传递依赖
      • 4.3 Maven生命周期
      • 4.4 主要生命周期阶段
      • 4.5 常见问题解决
    • 五、单元测试
      • 5.1 测试阶段划分
      • 5.2 单元测试的优势
      • 5.3 JUnit的使用
        • 引入依赖
        • 创建测试类
      • 5.4 JUnit断言
      • 5.5 JUnit常用注解
      • 5.6 测试覆盖率
      • 5.7 依赖范围(scope)

Maven安装、IDEA集成Maven、依赖管理、单元测试

一、认识Maven

1.1 什么是Maven?

Maven是一个项目管理工具,可以帮助我们自动化构建、依赖管理和项目信息管理。你可以把它想象成一个"项目管家",负责帮你处理项目中的各种繁琐事务,让你专注于代码编写。

1.2 Maven的作用

Maven主要有三大作用:

  1. 方便快捷的依赖管理
    就像我们做饭需要各种食材,开发项目也需要各种"代码食材"(比如数据库驱动、工具类库等)。Maven可以自动帮你下载、管理这些依赖,不需要手动去官网下载JAR包。

  2. 标准的项目构建流程
    不管是小项目还是大项目,Maven都提供了统一的构建步骤(编译、测试、打包等),就像工厂的流水线一样标准化。

  3. 统一项目结构
    使用Maven创建的项目,目录结构都是统一的。这意味着你接手任何Maven项目时,都能快速找到各个文件的位置,就像住酒店时总能找到卫生间在哪里一样。

1.3 Maven的结构

pom.xml文件

pom.xml是Maven项目的"身份证",包含了项目的基本信息和配置。它就像项目的"简历",记录了项目叫什么名字、用了什么依赖、怎么构建等信息。

仓库的作用和查找顺序

Maven的仓库就像"食材仓库",用于存放项目所需的依赖包。查找依赖时,Maven会按照以下顺序寻找:

  1. 本地仓库:你电脑上的专属仓库(默认在~/.m2/repository),相当于你家冰箱。
  2. 中央仓库:Maven官方的全球仓库(https://mvnrepository.com/),相当于大型超市。
  3. 远程仓库:公司或团队自己搭建的仓库,相当于社区便利店。

二、安装Maven

2.1 下载Maven

从Maven官网下载:https://maven.apache.org/download.cgi
建议下载Binary zip archive版本(无需安装,解压即可用)。

2.2 配置本地仓库路径

解压后,打开conf/settings.xml文件,找到<localRepository>标签,设置本地仓库路径:

<localRepository>D:\maven-repository</localRepository>

2.3 配置阿里云私服

由于中央仓库在国外,下载依赖可能很慢。我们可以配置阿里云私服(国内镜像),就像在国内找代购一样更快:

<mirrors>标签中添加:

<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>aliyun maven</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>

2.4 配置环境变量

  1. 新增系统变量MAVEN_HOME,值为Maven解压目录(如D:\apache-maven-3.8.8
  2. Path环境变量中添加%MAVEN_HOME%\bin

验证安装是否成功:打开命令行输入mvn -v,如果显示Maven版本信息则安装成功。

三、IDEA集成并创建Maven项目

3.1 更改IDEA配置

3.1.1 基本Maven配置

在IDEA欢迎页面点击Customize → All settings,依次进入:
Build,Execution,Deployment → Build Tools → Maven
配置以下三项:

  • Maven home path:Maven安装路径
  • User settings file:Maven的settings.xml文件路径
  • Local repository:本地仓库路径
3.1.2 配置JRE

进入Maven → Runner,在JRE下拉框选择已安装的JDK。

3.1.3 配置编译器版本

进入Compiler → Java Compiler,设置Project bytecode version为你的JDK版本(如11)。

3.2 创建Maven项目

  1. 在IDEA中点击New Project
  2. 选择Maven(Build system选择Maven)
  3. 选择JDK版本,填写GroupId(组织标识,如com.example)和ArtifactId(项目标识,如maven-demo
  4. 点击Create完成创建

3.3 Maven坐标

3.3.1 什么是坐标?

Maven坐标就像"快递地址",唯一标识一个依赖包。通过坐标,Maven能精准找到你需要的依赖。

3.3.2 坐标的组成部分
<groupId>com.example</groupId>    <!-- 组织/公司标识 -->
<artifactId>demo</artifactId>     <!-- 项目/模块名称 -->
<version>1.0.0</version>          <!-- 版本号 -->
<packaging>jar</packaging>        <!-- 打包类型(默认jar) -->
3.3.3 版本分类
  • RELEASE:正式版本,稳定可靠,如1.0.0
  • SNAPSHOT:快照版本,开发中的不稳定版本,如1.0.0-SNAPSHOT

四、依赖管理

4.1 添加依赖的方式

pom.xml<dependencies>标签中添加依赖:

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>  <!-- 依赖范围 -->
</dependency>

4.2 排除不要的传递依赖

当A依赖B,B依赖C时,A会自动依赖C(传递依赖)。如果不需要C,可以排除:

<dependency><groupId>com.example</groupId><artifactId>A</artifactId><version>1.0.0</version><exclusions><exclusion><groupId>com.example</groupId><artifactId>C</artifactId></exclusion></exclusions>
</dependency>

4.3 Maven生命周期

Maven有三套生命周期,就像游戏的不同关卡:

  1. clean:清理项目(删除编译生成的文件)
  2. default:构建项目(编译、测试、打包等核心流程)
  3. site:生成项目文档

4.4 主要生命周期阶段

阶段作用类比
clean清理编译生成的文件打扫房间
compile编译源代码把草稿打印成正式文档
test运行测试代码检查作业答案
package打包成JAR/WAR文件把文件整理成压缩包
install安装到本地仓库把做好的菜放进冰箱

注意:同一生命周期中,执行后面的阶段会自动执行前面的所有阶段。例如执行package会先执行compiletest

4.5 常见问题解决

如果依赖报错(红色下划线),可能是下载失败留下了.lastUpdated文件:

  1. 进入本地仓库目录,打开命令行
  2. 执行命令删除所有.lastUpdated文件:
    del /s *.lastUpdated
    
  3. 在IDEA中刷新Maven(右键项目 → Maven → Reload Project)

五、单元测试

5.1 测试阶段划分

软件测试就像体检,从不同角度检查软件质量:

测试阶段说明类比
单元测试测试最小功能单元(如方法)检查身体的每个器官
集成测试测试模块之间的交互检查器官之间的协作
系统测试测试整个系统功能全面体检
验收测试用户确认软件是否满足需求体检报告确认

测试方法:

  • 白盒测试:看代码测(如检查循环条件)
  • 黑盒测试:不看代码,只测功能(如输入输出是否正确)
  • 灰盒测试:结合白盒和黑盒(如既看接口又测功能)

5.2 单元测试的优势

main方法中测试的缺点:

  • 每次只能测试一个方法
  • 需要手动注释/取消注释代码
  • 无法批量运行多个测试用例

单元测试工具(如JUnit)的优势:

  • 可以同时测试多个方法
  • 自动生成测试报告
  • 支持断言验证结果

5.3 JUnit的使用

引入依赖

pom.xml中添加JUnit依赖:

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>  <!-- 只在测试时生效 -->
</dependency>
创建测试类

src/test/java目录下创建测试类,命名规范:被测试类名+Test,如CalculatorTest

public class CalculatorTest {@Test  // 标记这是一个测试方法public void testAdd() {Calculator calc = new Calculator();int result = calc.add(2, 3);assertEquals(5, result);  // 断言结果是否为5}
}

5.4 JUnit断言

断言用于验证实际结果是否符合预期,常用断言方法:

方法作用
assertEquals(a, b)判断a是否等于b
assertTrue(condition)判断条件是否为true
assertNotNull(obj)判断对象是否不为null
assertArrayEquals(arr1, arr2)判断数组是否相等

5.5 JUnit常用注解

注解作用示例
@Test标记测试方法@Test public void testXXX() {}
@Before每个测试方法前执行(如初始化资源)@Before public void init() {}
@After每个测试方法后执行(如释放资源)@After public void destroy() {}
@BeforeClass所有测试前执行一次(静态方法)@BeforeClass public static void beforeAll() {}
@AfterClass所有测试后执行一次(静态方法)@AfterClass public static void afterAll() {}
@Ignore忽略该测试方法@Ignore @Test public void testXXX() {}

注意:测试方法必须是public void,且不能有参数。

5.6 测试覆盖率

测试覆盖率表示代码被测试覆盖的比例,IDEA中查看覆盖率的方法:

  1. 右键测试类 → Run ‘XXXTest’ with Coverage
  2. 测试完成后,IDEA会显示覆盖率报告,包括:
    • 类覆盖率
    • 方法覆盖率
    • 行覆盖率

5.7 依赖范围(scope)

scope用于限制依赖的作用范围,常用取值:

scope作用范围示例
compile所有阶段都可用(默认)Spring Core
test只在测试阶段可用JUnit
provided编译和测试时可用,运行时由容器提供Servlet API
runtime运行时可用,编译时不需要JDBC驱动
system本地jar包(需配合systemPath使用)本地特殊jar包
http://www.dtcms.com/a/356198.html

相关文章:

  • 《开发避坑指南:从异常中读懂系统的“求救信号”》
  • 自动化Reddit 效率已ready
  • 使用 Dify 和 LangBot 搭建飞书通信机器人
  • Webrtc支持FFMPEG硬解码之Intel
  • 2025五天申请邓白氏编码成功
  • Python 轻量级 HTML 解析器 - lxml入门教程
  • Java研学-SpringCloud(十)
  • Android14 init.qcom.usb.rc详解
  • 设计模式之状态机模式
  • hive udf函数实现在sql查询网站价格
  • Vue3 中的 v-model 语法糖
  • (Nginx)基于Nginx+PHP 驱动 Web 应用(上):配置文件与虚拟主机篇
  • 基于SQL大型数据库的智能问答系统优化
  • 安卓开发---SimpleAdapter
  • 不同卷积不同的滤波效果
  • 如何将OFD文件转换为PDF?总结在线OFD转PDF方法
  • QT5.14.2、CMake 扩展openCV
  • GPT-5原理
  • 第二章 Vue + Three.js 实现鼠标拖拽旋转 3D 立方体交互实践
  • Python- Visual Studio Code配置Anaconda
  • WebIDEPLOY 赋能数字校园建设:智慧管理系统的效能升级与实践路径 —— 以校园资源协同优化构建高效教育生态的探索
  • 洞悉核心,驭数而行:深入理解 Oracle SQL 优化器(RBO 与 CBO)的性能调优哲学
  • C# 一个投资跟踪程序的设计与实现:面向对象与设计模式的深度解析
  • ros、slam、激光雷达、自动驾驶相关学习内容和计划
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day15
  • PyTorch 机器学习基础(选择合适优化器)
  • 【Big Data】Alluxio 首个基于云的数据分析和开源AI数据编排技术
  • 补题报告08
  • 从零开始的云计算生活——第五十四天,悬梁刺股,kubernetes模块之组件与网络
  • 计算机是如何运行的