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主要有三大作用:
-
方便快捷的依赖管理
就像我们做饭需要各种食材,开发项目也需要各种"代码食材"(比如数据库驱动、工具类库等)。Maven可以自动帮你下载、管理这些依赖,不需要手动去官网下载JAR包。 -
标准的项目构建流程
不管是小项目还是大项目,Maven都提供了统一的构建步骤(编译、测试、打包等),就像工厂的流水线一样标准化。 -
统一项目结构
使用Maven创建的项目,目录结构都是统一的。这意味着你接手任何Maven项目时,都能快速找到各个文件的位置,就像住酒店时总能找到卫生间在哪里一样。
1.3 Maven的结构
pom.xml文件
pom.xml
是Maven项目的"身份证",包含了项目的基本信息和配置。它就像项目的"简历",记录了项目叫什么名字、用了什么依赖、怎么构建等信息。
仓库的作用和查找顺序
Maven的仓库就像"食材仓库",用于存放项目所需的依赖包。查找依赖时,Maven会按照以下顺序寻找:
- 本地仓库:你电脑上的专属仓库(默认在
~/.m2/repository
),相当于你家冰箱。 - 中央仓库:Maven官方的全球仓库(https://mvnrepository.com/),相当于大型超市。
- 远程仓库:公司或团队自己搭建的仓库,相当于社区便利店。
二、安装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 配置环境变量
- 新增系统变量MAVEN_HOME,值为Maven解压目录(如
D:\apache-maven-3.8.8
) - 在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项目
- 在IDEA中点击New Project
- 选择Maven(Build system选择Maven)
- 选择JDK版本,填写GroupId(组织标识,如
com.example
)和ArtifactId(项目标识,如maven-demo
) - 点击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有三套生命周期,就像游戏的不同关卡:
- clean:清理项目(删除编译生成的文件)
- default:构建项目(编译、测试、打包等核心流程)
- site:生成项目文档
4.4 主要生命周期阶段
阶段 | 作用 | 类比 |
---|---|---|
clean | 清理编译生成的文件 | 打扫房间 |
compile | 编译源代码 | 把草稿打印成正式文档 |
test | 运行测试代码 | 检查作业答案 |
package | 打包成JAR/WAR文件 | 把文件整理成压缩包 |
install | 安装到本地仓库 | 把做好的菜放进冰箱 |
注意:同一生命周期中,执行后面的阶段会自动执行前面的所有阶段。例如执行
package
会先执行compile
和test
。
4.5 常见问题解决
如果依赖报错(红色下划线),可能是下载失败留下了.lastUpdated
文件:
- 进入本地仓库目录,打开命令行
- 执行命令删除所有
.lastUpdated
文件:del /s *.lastUpdated
- 在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中查看覆盖率的方法:
- 右键测试类 → Run ‘XXXTest’ with Coverage
- 测试完成后,IDEA会显示覆盖率报告,包括:
- 类覆盖率
- 方法覆盖率
- 行覆盖率
5.7 依赖范围(scope)
scope
用于限制依赖的作用范围,常用取值:
scope | 作用范围 | 示例 |
---|---|---|
compile | 所有阶段都可用(默认) | Spring Core |
test | 只在测试阶段可用 | JUnit |
provided | 编译和测试时可用,运行时由容器提供 | Servlet API |
runtime | 运行时可用,编译时不需要 | JDBC驱动 |
system | 本地jar包(需配合systemPath使用) | 本地特殊jar包 |