不是怎么还在转啊...

004-Maven

Maven

  • Maven是一款用于管理和构建Java项目的工具,是apache旗下的一个开源项目

Maven作用

image-20250820201128535

image-20250820200953611

image-20250820201009591

image-20250820201118136

Maven概述

  • Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建

  • 作用:方便的依赖管理

  • 标准的项目构建流程

  • 同一的项目结构

  • 官网

  • Maven的构成

    image-20250820202506947

    • pom.xml文件内容如下:

      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
      
          <groupId>org.example</groupId>
          <artifactId>houduanlianxi</artifactId>
          <version>1.0-SNAPSHOT</version>
      
          <properties>
              <maven.compiler.source>24</maven.compiler.source>
              <maven.compiler.target>24</maven.compiler.target>
              <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          </properties>
      
          <dependencies>
              <dependency>
                  <groupId>commons-io</groupId>
                  <artifactId>commons-io</artifactId>
                  <version>2.16.1</version>
              </dependency>
          </dependencies>
      
      </project>
      
      • 其中,项目对象模型(POM)就是如下这些:

        <groupId>org.example</groupId>
        <artifactId>houduanlianxi</artifactId>
        <version>1.0-SNAPSHOT</version>
        
        <properties>
            <maven.compiler.source>24</maven.compiler.source>
            <maven.compiler.target>24</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        
      • 依赖管理模型如下:

        <dependencies>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.16.1</version>
            </dependency>
        </dependencies>
        
      • 仓库:用于存储资源,管理各种jar包

        • 本地仓库:自己计算机上的一个目录
        • 中央仓库:由Maven团队维护的全球唯一的。仓库地址
        • 远程仓库(私服):一般由公司团队搭建的私有仓库

安装

  • 安装步骤:

    • 解压apache-maven-3.9.4-bin.zip

    • 配置本地仓库,修改conf/settings.xml中的<localRepository> 为一个指定目录

      image-20250820203529130

    • 配置阿里云私服:修改conf/settings.xml中的<mirrors> 标签,为其添加如下子标签:

      image-20250820203635594

    • 配置环境变量:MAVEN_HOME为maven的解压目录,并将其bin目录加入PATH环境变量

IDEA集成Maven

image-20250820212635093

image-20250820212728149

image-20250820212814590

image-20250820212903179

image-20250820213011066

  • 到这里全局maven就配置好了,在创建一个空项目后,选择jdk版本

image-20250820213513376

image-20250820214228415

image-20250820214118515

  • 由于test目录下的resources不常用,所以如果需要时可以自己创建

    image-20250820214514639

    image-20250820214539421

image-20250820214802506

Maven坐标

  • 什么是坐标?

    • Maven中的坐标是资源(jar)的唯一标识,通过该坐标可以唯一定位资源位置
    • 使用坐标来定义项目或引入项目中需要的依赖
  • Maven坐标组成

    • groupId:定义当前Maven项目路数组织名称(通常是域名反写,例如:com.itheima)
    • artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
    • version:定义当前项目版本号
      • SNAPSHOT:功能不稳定、尚处于开发中的版本,即快照版本
      • RELEASE或者版本号:功能趋于稳定、当前更新停止,可用于发行的版本
      • 上面两个就是你还在开发就写SNAPSHOT,开发完了要发布项目了就改成RELEASE
  • 示例:

    <groupId>com.mycode</groupId>
    <artifactId>maven-project01</artifactId>
    <version>1.0-SNAPSHOT</version>
    

​ 下面是引入依赖时依赖的坐标

image-20250820215405502

导入Maven项目(IDEA中)

  • 第一步先把项目模块文件夹拖入工程项目文件下,然后两种方式二选一

  • 方式一:按下面步骤打开文件选择,选择其中的pom.xml文件

    image-20250820215921324

    image-20250820220017238

    image-20250820220209652

  • 方式二:按下面步骤打开文件选择,选择其中的pom.xml文件

    image-20250820220258839

    还是选择pom.xml文件

依赖配置

  • 依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖

  • 配置

    • 在pom.xml中编写<dependencies> 标签
    • <dependencies> 标签中,使用<dependency>引入坐标
    • 定义坐标的groupId、artifactId、version
    • 点击刷新按钮,引入最新加入的坐标
  • 如果不知道依赖的坐标信息,可以到 坐标网站 中搜索

  • 排除依赖:指主动断开依赖的资源,被排除的资源无需指定版本。需要使用<exclusions> 中嵌套<exclusion> 标签

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.2.9</version>
    
            <exclusions>
                <exclusion>
                    <artifactId>micrometer-observation</artifactId>
                    <groupId>io.micrometer</groupId>
                </exclusion>
            </exclusions>
    
        </dependency>
    </dependencies>
    

生命周期

  • Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一

  • Maven中有3套相互独立的生命周期

  • 每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段

    image-20250822174429835

    image-20250822174526747

  • 生命周期阶段(重要阶段)

    image-20250822174612532

    • 注意:在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行。
      • 例如,clean隶属于clean这套生命周期,compile、test、package、install隶属于default这套生命周期,而install比前面三个靠后,所以运行install时,compile、test、package都会运行,而clean不在同一套中,因此不运行。
  • 执行指定生命周期的两种方式:

    • 在idea中,右侧的maven工具栏,选中对应生命周期,双击执行

    • 在命令行中,通过命令执行

      mvn 生命周期阶段
      

测试

  • 测试:是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程

  • 阶段划分:单元测试、集成测试、系统测试、验收测试

    image-20250822180105599

  • 测试方法:白盒测试、黑盒测试、灰盒测试

    image-20250822180820632

单元测试(白盒测试)

  • 介绍:对软件的基本组成单位进行测试,是最小测试单位
  • 目的:检验软件的基本组成单位的正确性
  • 测试人员:开发人员

集成测试(灰盒测试)

  • 介绍:将已分别通过测试的单元,按设计要求组合成系统或子系统,在进行的测试
  • 目的:检查单元之间的写作是否正确
  • 测试人员:开发人员

系统测试(黑盒测试)

  • 介绍:对已经集成好的软件系统进行彻底的测试
  • 目的:验证软件系统的正确性、性能是否满足指定的要求
  • 测试人员:测试人员(测试工程师)

验收测试(黑盒测试)

  • 介绍:交付测试,是针对用户需求、业务流程进行的正式的测试
  • 目的:验证软件系统是否满足验收标准
  • 测试人员:客户/需求方

单元测试

  • 单元测试:就是针对最小的功能单元(方法),编写测试代码对其正确性进行测试

  • main方法测试的问题

    image-20250822181103063

  • Junit:最流行的Jaca测试框架之一,提供了一些功能,方便程序进行单元测试(第三方公司提供)

    image-20250822181157337

    • 使用步骤

      • 在pom.xml中引入Junit依赖

        image-20250822181448191

      • 在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上生命@Test 注解

        image-20250822181845289

      • 运行单元测试(测试通过:绿色;测试失败:红色)

    • 注意:

      • Junit单元测试类名命名规范为:XxxxxTest【规范】。
      • Junit单元测试的方法必须声明为public void【规定】。
      • 建议方法名test开头

断言

  • Junit提供了一些辅助方法,用来帮我们确定被测试的方法是否按照预期的效果正常工作,这种方式成为断言

    image-20250822184925717

    • 上述方法形参中的最后一个参数msg,表示错误提示信息,可以不指定(有对应的重载方法)

    • 示例:

      image-20250822185352468

常见注解

  • 在Junit中还提供了一些注解,还增强其功能,常见的注解有以下几个:

    image-20250822185554049

企业开发规范

  • 原则:编写测试方法时,要尽可能的覆盖业务方法中所有可能的情况()尤其是边界值

    image-20250822190527360

  • 测试覆盖率

    image-20250822191255507

    image-20250822191315691

    • 覆盖率统计范围修改方式

      image-20250822191520422

      image-20250822191546723

AI生成单元测试

image-20250822191830625

  • 点方法上面的通译灵码插件标志可以生成单元测试
  • AI生成的代码要检查正确性

Maven依赖范围

image-20250822192408394

  • 正常状态下,测试方法可以写在main包下,不会报错,但这么做不合规范

  • 依赖范围:依赖的jar包,默认状态下,可以在任何地方使用。可以通过<scope>...</scope> 设置其作用范围

  • 作用范围:

    • 主程序范围有效。(main文件夹范围内)
    • 测试程序范围有效。(test文件夹范围内)
    • 是哦否参与大包运行。(package指令范围内)
  • image-20250822192745859

  • 示例

    image-20250822192756835

  • 跳过maven中测试的生命周期

    image-20250822193238667

Maven常见问题

  • 某个依赖被标红,且刷新后报错

    image-20250822193459814

    • 原因:下载过程中网络不好,下了一部分但不完整,存在残留文件,此时点击刷新,maven不会帮我们重新下载

      image-20250822193604141

    • 解决方式:

      • 找到本地仓库,把所有lastUpdated文件都删了,然后重新加载项目

      • 通过命令 del /s *.lastUpdated 批量递归删除指定目录下的xxx.lastUpdated文件,删除后重新加载项目即可(刷新maven,不然就重启idea)

        image-20250822193946879

posted @ 2025-08-23 15:57  Quirkygbl  阅读(11)  评论(0)    收藏  举报