用 Maven 做依赖管理


在这里插入图片描述


1 依赖配置

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

例如:在当前工程中,我们需要用到 logback 来记录日志,此时就可以在 maven 工程的 pom.xml文件中,引入 logbac k的依赖。具体步骤如下:

  1. pom.xml 中编写标签

  2. 在标签中使用引入坐标

  3. 定义坐标的 groupId、artifactId、version

<dependencies>
    <!-- 第1个依赖 : logback -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.11</version>
    </dependency>
    <!-- 第2个依赖 : junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>
  1. 点击刷新按钮,引入最新加入的坐标
    • 刷新依赖:保证每一次引入新的依赖,或者修改现有的依赖配置,都可以加入最新的坐标

在这里插入图片描述

注意事项:

  1. 如果引入的依赖,在本地仓库中不存在,将会连接远程仓库 / 中央仓库,然后下载依赖(这个过程会比较耗时,耐心等待)
  2. 如果不知道依赖的坐标信息,可以到mvn的中央仓库https://mvnrepository.com/中搜索

添加依赖的几种方式:

  1. 利用中央仓库搜索的依赖坐标


  1. 利用 IDEA 工具搜索依赖

在这里插入图片描述

  1. 熟练上手 maven 后,快速导入依赖

在这里插入图片描述


2 依赖传递

2.1 依赖具有传递性

早期我们没有使用maven时,向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下。如下图所示,需要logback-classic时,由于logback-classic又依赖了logback-core和slf4j,所以必须把这3个jar包全部复制到项目工程下

在这里插入图片描述

我们现在使用了 maven,当项目中需要使用 logback-classic 时,只需要在 pom.xml 配置文件中,添加 logback-classic 的依赖坐标即可。

在这里插入图片描述

在 pom.xml 文件中只添加了 logback-classic 依赖,但由于 maven 的依赖具有传递性,所以会自动把所依赖的其他 jar 包也一起导入。

依赖传递可以分为:

  1. 直接依赖:在当前项目中通过依赖配置建立的依赖关系

  2. 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

在这里插入图片描述

比如以上图中:

  • projectA 依赖了 projectB。对于 projectA 来说,projectB 就是直接依赖。
  • 而 projectB 依赖了 projectC 及其他jar包。 那么此时,在 projectA 中也会将 projectC 的依赖传递下来。对于projectA 来说,projectC就是间接依赖。

在这里插入图片描述


2.2 排除依赖

问题:之前我们讲了依赖具有传递性。那么A依赖B,B依赖C,如果A不想将C依赖进来,怎么搞?

答案:在maven项目中,我们可以通过排除依赖来实现。

什么是排除依赖?

  • 排除依赖:指主动断开依赖的资源。(被排除的资源无需指定版本)
<dependency>
    <groupId>com.itheima</groupId>
    <artifactId>maven-projectB</artifactId>
    <version>1.0-SNAPSHOT</version>
   
    <!--排除依赖, 主动断开依赖的资源-->
    <exclusions>
    	<exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </exclusion>
    </exclusions>
</dependency>

依赖排除示例:

  • maven-projectA 依赖了 maven-projectB,maven-projectB 依赖了 Junit。基于依赖的传递性,所以 maven-projectA 也依赖了 Junit

在这里插入图片描述

  • 使用排除依赖后

在这里插入图片描述

<!--
   1. 直接依赖 优先级高于间接依赖(越近越优先)
   2. 在直接依赖中 后面的优先 (小儿子优先)
   3. 在同级间接依赖中,靠上的优先 (其他的是血缘关系进的优先,老大优先)
-->

3 依赖范围

在项目中导入依赖的jar包后,默认情况下,可以在任何地方使用。

在这里插入图片描述

如果希望限制依赖的使用范围,可以通过标签设置其作用范围。

在这里插入图片描述

作用范围:

  1. 主程序范围有效(main文件夹范围内)

  2. 测试程序范围有效(test文件夹范围内)

  3. 是否参与打包运行(package指令范围内)

在这里插入图片描述

如上图所示,给junit依赖通过scope标签指定依赖的作用范围为 test。 那么这个依赖就只能作用在测试环境,其他环境下不能使用。

scope标签的取值范围:

scope主程序测试程序打包(运行)范例
compile(默认)YYYlog4j
test-Y-junit
providedYY-servlet-api
runtime-YYjdbc驱动

4 生命周期

4.1 介绍

Maven 的生命周期就是为了对所有的构建过程进行抽象和统一。 描述了一次项目构建,经历哪些阶段。

在Maven出现之前,项目构建的生命周期就已经存在,软件开发人员每天都在对项目进行清理,编译,测试及部署。虽然大家都在不停地做构建工作,但公司和公司间、项目和项目间,往往使用不同的方式做类似的工作。

Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完美的,易扩展的项目构建生命周期。这个生命周期包含了项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成等几乎所有构建步骤。

Maven对项目构建的生命周期划分为3套(相互独立):

在这里插入图片描述

  • clean:清理工作。

  • default:核心工作。如:编译、测试、打包、安装、部署等。

  • site:生成报告、发布站点等。

三套生命周期又包含哪些具体的阶段呢, 我们来看下面这幅图:

在这里插入图片描述

我们看到这三套生命周期,里面有很多很多的阶段,这么多生命周期阶段,其实我们常用的并不多,主要关注以下几个:

• clean:移除上一次构建生成的文件

• compile:编译项目源代码

• test:使用合适的单元测试框架运行测试(junit)

• package:将编译后的文件打包,如:jar、war等

• install:安装项目到本地仓库

Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际工作。在Maven的设计中,实际任务(如源代码编译)都交由插件来完成。

在这里插入图片描述

IDEA工具为了方便程序员使用maven生命周期,在右侧的maven工具栏中,已给出快速访问通道

在这里插入图片描述

生命周期的顺序是:clean --> validate --> compile --> test --> package --> verify --> install --> site --> deploy

我们需要关注的就是:clean --> compile --> test --> package --> install

说明:在同一套生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行。

思考:当运行package生命周期时,clean、compile生命周期会不会运行?

​ clean不会运行,compile会运行。 因为 compile 与 package 属于同一套生命周期,而clean与package不属于同一套生命周期。


4.2 执行

在日常开发中,当我们要执行指定的生命周期时,有两种执行方式:

  1. 在 idea 工具右侧的maven工具栏中,选择对应的生命周期,双击执行
  2. 在 DOS 命令行中,通过maven命令执行

方式一:在idea中执行生命周期

  • 选择对应的生命周期,双击执行

在这里插入图片描述

compile:

在这里插入图片描述

test:

在这里插入图片描述

package:

在这里插入图片描述

install:

在这里插入图片描述

clean:

在这里插入图片描述


方式二:在命令行中执行生命周期

  1. 进入到DOS命令行

在这里插入图片描述

在这里插入图片描述






  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值