第3章 后端Web基础 (Maven)

发布时间:2026/10/7 2:30:21
第3章 后端Web基础 (Maven) 一、Maven概述1、课程介绍Maven是一款用于管理和构建Java项目的工具是apache旗下的一个开源项目。Apache软件基金会成立于1999年7月是目前世界上最大的最受欢迎的开源软件基金会也是一个专门为支持开源项目而生的非盈利性组织。 开源项目Welcome to The Apache Software Foundation | Apache Software Foundation1依赖管理方便快捷的管理项目依赖的资源jar包无需手动导入jar包只需要在pom.xml文件中声明即可2项目构建标准化的跨平台Linux、Windows、MacOs)的自动化项目构建方式传统项目构建方式需要一系列流程而Maven的项目构建提供了项目的生命周期项目构建的文件存放在target目录下3统一项目结构提供标准、统一的项目结构 传统的各编译软件的项目结构是不相通的引入Maven后就可以使用同一个项目结构2、Maven介绍Apache Maven是一个项目管理和构建工具它基于项目对象模型(POM)project object madel的概念通过一小段描述信息来管理项目的构建。作用方便的依赖管理标准的项目构建流程统一的项目结构官网Welcome to Apache Maven – Maven项目对象模型POM!--描述当前项目信息。包名、项目名、版本-- groupIdcom.itheima/groupId artifactIdmaven-project01/artifactId version1.0-SNAPSHOT/version ​ !--基于JDK哪个版本开发的 运行的时候是基于哪个JDK版本 字符集编码-- properties maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties依赖管理模型Dependencydependency里包括但不限于这些标签dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version6.1.4/version ​ !--排除依赖-- exclusions exclusion groupIdio.micrometer/groupId artifactIdmicrometer-observation/artifactId /exclusion /exclusions /dependency /dependencies仓库用于存储资源管理各种jar包。本地仓库自己计算机上的一个目录。我的本地仓库地址D:\install\envresoce\maven\repository\commons-io\commons-io\2.6中央仓库由Maven团队维护的全球唯一的。仓库地址Central Repository:远程仓库私服)一般由公司团队搭建的私有仓库。3、Maven安装(1)解压Apache-maven-3.9.4-bin.zip(2)配置本地仓库解压Maven文件创建mvn-repo文件夹并在conf\settings.xml文件下构建此本地仓库路径(3)配置阿里云私服地址该文件中mirrors标签中覆盖粘贴mirror idalimaven/id namealiyun maven/name urlhttp://maven.aliyun.com/nexus/content/groups/public//url mirrorOfcentral/mirrorOf /mirror(4)配置环境变量path中5测试二、IDEA集成Maven1、Maven项目创建1配置Maven和JDK在欢迎页面配置Maven配置JRE配置字节码文件配置JDK版本在新建的项目里面打开Project SettingsJDK和语言版本都选21教程里面选的172创建模块这就是创建出来的Maven项目Maven项目文件介绍2、Maven坐标什么是坐标Maven中的坐标是资源(jar)的唯一标识通过该坐标可以唯一定位资源位置。使用坐标来定义项目或引入项目中需要的依赖。Maven坐标主要组成groupld定义当前Maven项目隶属组织名称通常是域名反写例如com.itheimaartifactld定义当前Maven项目名称通常是模块名称例如order-service、goods-serviceversion定义当前项目版本号SNAPSHOT:功能不稳定、尚处于开发中的版本即快照版本RELEASE功能趋于稳定、当前更新停止可以用于发行的版本上面两个都是约定而不是规定例如groupldcom.itheima/groupld artifactldmaven-project01/artifactld version1.0-SNAPSHOT/version3、Maven项目导入1方式一2方式二3演示先将Maven项目放到项目文件夹下面选择这个pom文件先导入项目获取项目再导入项目识别Maven项目导入Maven项目建议将要导入的maven项目复制到你的项目目录下建议选择maven项目的pom.xml文件进行导入因为会将关联项目一并导入三、依赖管理1、依赖配置依赖指当前项目运行所需要的jar包一个项目中可以引入多个依赖。配置 1.在pom.xml中编写dependencies标签2.在dependencies标签中使用dependency引入坐标3.定义坐标的groupldartifactldversion4.点击刷新按钮引入最新加入的坐标注意 如果不知道依赖的坐标信息可以到https://mvnrepository.com/中搜索。当引入依赖时会引入多个依赖这些依赖都是引入该依赖时的依赖的其他依赖称为Maven的依赖传递如果不想要某个依赖可以排除依赖排除依赖指主动断开依赖的资源被排除的资源无需指定版本。2、生命周期Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。Maven中有3套相互独立的生命周期clean清理工作。default核心工作如编译、测试、打包、安装、部署等。site生成报告、发布站点等。每套生命周期包含一些阶段phase阶段是有顺序的后面的阶段依赖于前面的阶段。Maven生命周期的各个阶段主要了解五个阶段生命周期阶段clean移除上一次构建生成的文件compile编译项目源代码test使用合适的单元测试框架运行测试(junit)package将编译后的文件打包如jar、war等install安装项目到本地仓库注意 在同一套生命周期中当运行后面的阶段时前面的阶段都会运行。clean就和其他四个不在同一套生命周期中演示在Maven项目下cmd输入mvn clean、mvn compile等在命令行窗口运行Maven生命周期install了Maven项目之后会在本地仓库下创建Maven项目的jar包具体路径可以顺着xml文件找重新看这张图四、单元测试1、概述测试是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。(1)阶段划分单元测试、集成测试、系统测试、验收测试。单元测试介绍对软件的基本组成单位进行测试最小测试单位。目的检验软件基本组成单位的正确性。测试人员开发人员集成测试介绍将已分别通过测试的单元按设计要求组合成系统或子系统再进行的测试。目的检查单元之间的协作是否正确。测试人员开发人员系统测试介绍对已经集成好的软件系统进行彻底的测试。目的验证软件系统的正确性、性能是否满足指定的要求。测试人员测试人员验收测试介绍交付测试是针对用户需求、业务流程进行的正式的测试。目的验证软件系统是否满足验收标准。测试人员客户/需求方(2)测试方法2、入门1main方法测试测试代码与源代码未分开难维护一个方法测试失败影响后面方法无法自动化测试得到测试报告3JUnit单元测试推荐测试代码与源代码分开便于维护可根据需要进行自动化测试可自动分析测试结果产出测试报告4案例使用JUnit对UserService中业务方法进行单元测试。1.在pom.xml中引入JUnit的依赖。!--junit依赖-- dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter/artifactId version5.9.1/version !--依赖范围-- scopetest/scope /dependency2.在test\java目录下创建测试类并编写对应的测试方法并在方法上声明Test注解。注意JUnit单元测试类名命名规范为XxxxxTest【规范】。JUnit单元测试的方法必须声明为public void【规定】package com.itheima; ​ import org.junit.jupiter.api.*; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; ​ /** * 测试类 */ DisplayName(用户信息测试类) public class UserServiceTest { Test public void testGetAge(){ //先new一个对象 UserService userService new UserService(); Integer age userService.getAge(100000200010011011); System.out.println(age); } } ​3.运行单元测试测试通过绿色测试失败红色)。3、断言(1)断言方法JUnit提供了一些辅助方法用来帮我们确定被测试的方法是否按照预期的效果正常工作这种方式称为断言。exp代表期望值act代表实际值 ​ Assertions.assertEquals(Object exp,Object act,String msg)//检查两个值是否相等不相等就报错。 Assertions.assertNotEquals(Object unexp,Object act,String msg)//检查两个值是否不相等相等就报错。 Assertions.assertNull(Object act, String msg)//检查对象是否为null不为null就报错。 Assertions.assertNotNull(Object act,String msg)//检查对象是否不为null为null就报错。 Assertions.assertTrue(boolean condition, String msg)//检查条件是否为true不为true就报错。 Assertions.assertFalse(boolean condition, String msg)//检查条件是否为false不为false就报错。 Assertions.assertThrows(Class expType,Executable exec,String msg)//检查程序运行抛出的异常是否符合预期 //Executable代表函数式接口提示:上述方法形参中的最后一个参数msg表示错误提示信息可以不指定有对应的重载方法。2案例检查两个值是否相等身份证倒数第二位是奇数代表男性偶数代表女性/** * 断言 */ Test public void testGenderWithAssert(){ UserService userService new UserService(); String gender userService.getGender(100000200010011011); //断言 //Assertions.assertEquals(男, gender); Assertions.assertEquals(男, gender, 性别获取错误有问题); }若断言测试失败3案例检查程序运行抛出的异常参数传入异常类型和一个Lambda表达式/** * 断言 */ Test public void testGenderWithAssert2(){ UserService userService new UserService(); //断言 Assertions.assertThrows(IllegalArgumentException.class, () - { userService.getGender(null); }); }异常类型业务逻辑中抛出的异常身份证号码无效Lambda表达式中调用该方法传入参数为nullpublic String getGender(String idCard){ if (idCard null || idCard.length() ! 18) { throw new IllegalArgumentException(无效的身份证号码); } return Integer.parseInt(idCard.substring(16,17)) % 2 1 ? 男 : 女; }若未抛出异常则显示未抛出异常的失败断言4、常见注解1常见注解在JUnit中还提供了一些注解还增强其功能常见的注解有以下几个注解 说明 备注 Test 测试类中的方法用它修饰才能成为测试方法才能启动执行 单元测试 ParameterizedTest 参数化测试的注解可以让单个测试运行多次每次运行时仅参数不同 用了该注解就不需要Test注解了 ValueSource 参数化测试的参数来源赋予测试方法参数 与参数化测试注解配合使用 DisplayName 指定测试类、测试方法显示的名称默认为类名、方法名 BeforeEach 用来修饰一个**实例方法**该方法会在**每一个**测试方法执行之前执行一次。 初始化资源(准备工作) AfterEach 用来修饰一个**实例方法**该方法会在**每一个**测试方法执行之后执行一次。 释放资源(清理工作) BeforeAll 用来修饰一个**静态方法**该方法会在所有测试方法之前**只执行一次**。 初始化资源(准备工作) AfterAll 用来修饰一个**静态方法**该方法会在所有测试方法之后**只执行一次**。 释放资源(清理工作)2BeforeEach、AfterEach、BeforeAll、AfterAll的使用可以用于new业务的方法BeforeAll //在所有的单元测试方法运行之前, 运行一次 public static void beforeAll(){ System.out.println(before All); } AfterAll //在所有的单元测试方法运行之后, 运行一次 public static void afterAll(){ System.out.println(after All); } BeforeEach //在每一个单元测试方法运行之前, 都会运行一次 public void beforeEach(){ System.out.println(before Each); } AfterEach //在每一个单元测试方法运行之后, 都会运行一次 public void afterEach(){ System.out.println(after Each); }3参数化测试/** * 参数化测试 */ DisplayName(测试用户性别) ParameterizedTest ValueSource(strings {100000200010011011,100000200010011031,100000200010011051}) public void testGetGender2(String idCard){ UserService userService new UserService(); String gender userService.getGender(idCard); //断言 Assertions.assertEquals(男, gender); }控制台输出结果5、企业开发单元测试定义规范1测试注意要考虑边界情况和正常情况新创建多个单元测试方法2查看单元测试的覆盖率在右侧展示单元测试覆盖率Class类的覆盖率Method方法的覆盖率getGender方法测试到了但是getAge方法没有测试到Line代码有多少覆盖到了Branch分支if else3只测单个文件的单元测试覆盖率6、基于AI依赖自动生成单元测试在业务方法上面的通义灵码中使用AI生成单元测试7、Maven依赖范围(1)依赖作用范围在maven项目中test目录存放单元测试的代码是否可以在main目录中编写单元测试呢依赖的jar包默认情况下可以在任何地方使用。可以通过scope.../scope设置其作用范围。作用范围主程序范围有效。main文件夹范围内)测试程序范围有效。test文件夹范围内是否参与打包运行。package指令范围内作用范围因此junit依赖可以限制作用范围!--junit依赖-- dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter/artifactId version5.9.1/version !--依赖范围-- !--默认是comple-- scopetest/scope /dependency(2)maven的生命周期test详解当生命周期执行到test时所有命名规范的以Test为结尾的测试方法都会运行若已经执行过test不想重复执行可以点击这里跳过test五、Maven常见问题解决方案Maven文件未完成下载产生原因由于网络原因依赖没有下载完整导致的在maven仓库中生成了xxx.lastUpdated文件该文件不删除不会再重新下载。解决方案 1根据maven依赖的坐标找到仓库中对应的xxx.lastUpdated文件删除删除之后重新加载项目即可。2.通过命令(del/s*.lastUpdated)批量递归删除指定目录下的xxx.lastUpdated文件删除之后重新加载项目即可。在Maven仓库的根目录下cmd执行del/s*.lastUpdated3.双击Maven目录下的del.bat文件该文件打包好了cmd命令最后重启项目即可注意 重新加载依赖依赖下载了之后maven面板可能还会报红此时可以关闭IDEA重新打开IDEA加载此项目即可。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询