Maven入门
一、什么是MavenMaven是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.itheimaartifactId项目/模块名称maven‑project01version版本号1.0‑SNAPSHOT版本说明SNAPSHOT快照版本开发中版本不稳定。RELEASE正式发行版本稳定可用。示例1定义当前Maven项目本身!-- 当前项目的坐标 --groupIdcom.itheima/groupIdartifactIdmaven‑project01/artifactIdversion1.0‑SNAPSHOT/version示例2引入第三方依赖hutool工具包!-- 引入hutool工具类jar包 --dependenciesdependencygroupIdcn.hutool/groupIdartifactIdhutool‑all/artifactIdversion5.8.27/version/dependency/dependencies把这段粘贴到pom.xmlMaven会自动去仓库下载hutool的jar包项目直接使用不用手动拷贝jar。四、依赖排除exclusions场景A依赖BB又依赖C有时候C会产生版本冲突我们需要排除掉传递过来的C依赖。语法exclusions标签写在dependency内部排除的时候不需要写version只需要groupId、artifactId。完整示例引入spring‑context排除它传递依赖的micrometer‑observationdependencygroupIdorg.springframeworkframework/groupIdartifactIdspring‑context/artifactIdversion6.1.4/version!-- 排除传递依赖 --exclusionsexclusiongroupIdio.micrometer/groupIdartifactIdmicrometer‑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/warinstall将构建产物安装到本机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为testdependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter/artifactIdversion5.9.3/versionscopetest/scope/dependency在src/test/java下编写测试类类命名规范XXXTest测试方法添加Test注解测试方法要求 public void无入参运行测试绿色代表测试通过红色代表测试失败8.3 Assertions 断言断言用来校验实际运行结果和预期结果是否一致不匹配直接抛出测试失败。断言API作用assertEquals(预期值,实际值,“提示信息”)判断两个值相等assertNotEquals判断两个值不相等assertNull对象必须等于nullassertNotNull对象不能为nullassertTrue条件结果必须为trueassertFalse条件结果必须为falseassertThrows断言代码抛出指定异常8.4 JUnit5常用注解注解功能说明Test标记普通测试方法ParameterizedTest参数化测试替代TestValueSource为参数化测试提供测试数据源DisplayName(自定义名称)修改测试在控制台展示的名字BeforeEach每一个测试方法执行前执行一次AfterEach每一个测试方法执行结束后执行一次BeforeAll所有测试运行前执行仅一次方法必须staticAfterAll所有测试运行结束后执行仅一次方法必须static记忆小技巧Each 对应每一个测试方法All 代表全部测试整体All修饰的方法必须静态。九、Maven依赖范围 scope通过scope标签设置jar包生效范围控制依赖在三处环境是否生效main业务代码test测试代码package打包运行scope取值main主程序test测试打包运行使用示例compile(默认)✅✅✅log4jtest❌✅❌JUnit单元测试包provided✅✅❌servlet-apiruntime❌✅✅jdbc驱动包test仅测试目录下可以使用打包不会把该jar打进项目JUnit就使用该范围。示例代码dependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter/artifactIdversion5.9.3/versionscopetest/scope/dependency