一、什么是Maven
Maven是Apache旗下开源的Java项目管理和构建工具,基于POM(Project Object Model,项目对象模型),通过pom.xml配置文件管理项目,解决传统Java开发jar包繁琐导入、项目构建流程混乱的痛点。
Maven三大核心作用
- 依赖管理:只需要写坐标,自动下载、管理项目需要的jar包,不用手动复制jar包。
- 标准项目构建流程:跨平台(Windows/Linux/MacOS)自动完成
compile编译 → test测试 → package打包 → deploy发布整套流程。 - 统一项目目录结构:所有Maven项目遵循同一套目录规范,不同开发人员、不同操作系统项目结构完全一致。
二、Maven仓库
1.仓库作用
Maven仓库用来存储和管理所有的jar包、插件。
2.仓库分类&查找jar包顺序
- 本地仓库:本机电脑上的文件夹,优先找这里,如果已经有需要的jar包,直接使用。
- 远程仓库(私服):公司内部搭建的仓库,如果本地没有,去私服找。
- 中央仓库:Maven官方的公共仓库,网络下载jar包的最终来源。
查找顺序:本地仓库 → 远程私服 → 中央仓库。本地没有就去下,下载完成后会保存到本地仓库,下次直接读取本地。
三、Maven坐标(核心)
坐标是jar包资源的唯一身份证,通过坐标可以准确定位到某一个jar包,写在pom.xml中。
坐标三要素
| 标签 | 含义 | 示例 |
|---|---|---|
groupId | 组织ID,一般域名反写 | com.itheima |
artifactId | 项目/模块名称 | maven‑project01 |
version | 版本号 | 1.0‑SNAPSHOT |
版本说明:
SNAPSHOT:快照版本,开发中版本,不稳定。RELEASE:正式发行版本,稳定可用。
示例1:定义当前Maven项目本身
<!-- 当前项目的坐标 --><groupId>com.itheima</groupId><artifactId>maven‑project01</artifactId><version>1.0‑SNAPSHOT</version>示例2:引入第三方依赖(hutool工具包)
<!-- 引入hutool工具类jar包 --><dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool‑all</artifactId><version>5.8.27</version></dependency></dependencies>把这段粘贴到pom.xml,Maven会自动去仓库下载hutool的jar包,项目直接使用,不用手动拷贝jar。
四、依赖排除(exclusions)
场景:A依赖B,B又依赖C,有时候C会产生版本冲突,我们需要排除掉传递过来的C依赖。
语法:<exclusions>标签写在<dependency>内部,排除的时候不需要写version,只需要groupId、artifactId。
完整示例:引入spring‑context,排除它传递依赖的micrometer‑observation
<dependency><groupId>org.springframeworkframework</groupId><artifactId>spring‑context</artifactId><version>6.1.4</version><!-- 排除传递依赖 --><exclusions><exclusion><groupId>io.micrometer</groupId><artifactId>micrometer‑observation</artifactId></exclusion></exclusions></dependency>五、IDEA中Maven环境配置&导入Maven项目
1.全局Maven环境配置
File → Settings → Build,Execution,Deployment → Build Tools → Maven
- 设置Maven安装根目录
- 设置
settings.xml配置文件路径(配置阿里云镜像、本地仓库路径) Runner配置JDK版本Java Compiler设置项目字节码版本,和JDK版本保持一致。
2.两种导入Maven项目的方式
方式一:Project Structure导入
File → Project Structure → Modules → Import Module → 选中项目的pom.xml文件
方式二:Maven面板导入(最常用)
打开右侧Maven面板,点击+号(Add Maven Projects),选中项目的pom.xml,完成导入。
注意:导入完成后,点击刷新按钮,让Maven重新加载pom.xml,下载依赖jar包。
六、Maven 生命周期
Maven的生命周期是对项目构建流程的一套抽象规范,一共三套互相独立的生命周期。
clean:执行清理,删除构建产生的target目录产物default:核心生命周期,编译、测试、打包、安装、部署都在这里site:生成项目文档、站点报告
💡重要规则:同一套生命周期内,执行后面阶段,会自动执行前面所有阶段。
default生命周期常用阶段:
| 阶段 | 功能说明 |
|---|---|
| clean | 清理,删除target目录 |
| compile | 编译业务源代码 |
| test | 执行单元测试 |
| package | 项目打包(jar/war) |
| install | 将构建产物安装到本机Maven本地仓库 |
| deploy | 将产物发布到远程私服仓库 |
七、软件测试基础概念
7.1 测试四大阶段
- 单元测试:测试最小代码单元(Java方法),开发人员编写
- 集成测试:测试各个模块之间交互调用
- 系统测试:对完整软件整体功能测试,测试人员执行
- 验收测试:面向客户业务需求,确认产品是否满足业务
7.2 三种测试分类
- 白盒测试:知晓代码内部逻辑,针对代码逻辑进行校验
- 黑盒测试:不关心内部实现,只校验输入输出功能
- 灰盒测试:结合白盒与黑盒,兼顾代码结构和外部功能
八、JUnit5单元测试
8.1 什么是单元测试
单元测试:针对Java中的方法,编写专门测试代码,验证方法逻辑输出是否符合预期。
❌ 使用main方法测试的弊端
- 业务代码和测试代码混杂在一起,不易维护
- 某一处代码异常,后续代码直接停止执行
- 无法自动化执行,没有可视化测试报告
✅ JUnit5优势
- 测试代码存放于
src/test/java,和业务代码src/main/java物理隔离 - 单个测试方法失败,不会影响其他测试方法运行
- 自动执行,红绿标识测试结果,自动生成测试报告
8.2 JUnit5 使用步骤
- 在pom.xml引入junit-jupiter依赖,一般设置scope为
test
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.3</version><scope>test</scope></dependency>- 在
src/test/java下编写测试类,类命名规范:XXXTest - 测试方法添加
@Test注解;测试方法要求 public void,无入参 - 运行测试,绿色代表测试通过,红色代表测试失败
8.3 Assertions 断言
断言用来校验实际运行结果和预期结果是否一致,不匹配直接抛出测试失败。
| 断言API | 作用 |
|---|---|
| assertEquals(预期值,实际值,“提示信息”) | 判断两个值相等 |
| assertNotEquals | 判断两个值不相等 |
| assertNull | 对象必须等于null |
| assertNotNull | 对象不能为null |
| assertTrue | 条件结果必须为true |
| assertFalse | 条件结果必须为false |
| assertThrows | 断言代码抛出指定异常 |
8.4 JUnit5常用注解
| 注解 | 功能说明 |
|---|---|
@Test | 标记普通测试方法 |
@ParameterizedTest | 参数化测试,替代@Test |
@ValueSource | 为参数化测试提供测试数据源 |
@DisplayName("自定义名称") | 修改测试在控制台展示的名字 |
@BeforeEach | 每一个测试方法执行前执行一次 |
@AfterEach | 每一个测试方法执行结束后执行一次 |
@BeforeAll | 所有测试运行前执行仅一次,方法必须static |
@AfterAll | 所有测试运行结束后执行仅一次,方法必须static |
💡记忆小技巧:Each 对应每一个测试方法;All 代表全部测试整体,All修饰的方法必须静态。
九、Maven依赖范围 scope
通过<scope>标签设置jar包生效范围,控制依赖在三处环境是否生效:
- main业务代码
- test测试代码
- package打包运行
| scope取值 | main主程序 | test测试 | 打包运行 | 使用示例 |
|---|---|---|---|---|
| compile(默认) | ✅ | ✅ | ✅ | log4j |
| test | ❌ | ✅ | ❌ | JUnit单元测试包 |
| provided | ✅ | ✅ | ❌ | servlet-api |
| runtime | ❌ | ✅ | ✅ | jdbc驱动包 |
test:仅测试目录下可以使用,打包不会把该jar打进项目,JUnit就使用该范围。
示例代码:
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.3</version><scope>test</scope></dependency>