首页 > 其他分享 >【Maven】Maven依赖管理

【Maven】Maven依赖管理

时间:2024-06-16 17:32:44浏览次数:12  
标签:maven 生命周期 管理 -- Maven 依赖 logback

01 依赖配置

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

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

  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>

4.点击刷新按钮,引入最新加入的坐标

  • 刷新依赖:保证每一次引入新的依赖,或者修改现有的依赖配置,都可以加入最新的坐标

注意事项:

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

添加依赖的几种方式:

  1. 利用中央仓库搜索的依赖坐标
  2. 利用IDEA工具搜索依赖,快捷键Alt + Insert弹出依赖搜索窗口
  3. 熟练上手maven后,快速导入依赖

02 依赖传递

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

  • 使用排除依赖后

03 依赖范围

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

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

作用范围:

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

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

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

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

scope标签的取值范围:

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

04 生命周期

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. 进入到CMD命令行

标签:maven,生命周期,管理,--,Maven,依赖,logback
From: https://www.cnblogs.com/hudad/p/18250957

相关文章

  • 【Python入门与进阶】综合练习题:学生成绩管理系统
    综合练习题:学生成绩管理系统题目描述:请你设计一个简单的学生成绩管理系统,要求能够进行以下操作:添加学生信息(包括姓名和学号)添加学生的成绩(包括科目和成绩)查询学生的平均成绩打印所有学生的成绩单解题思路:定义类:创建一个Student类,包含以下属性:name:学生姓名i......
  • 【Maven】IDEA集成Maven
    我们要想在IDEA中使用Maven进行项目构建,就需要在IDEA中集成Maven01配置Maven环境1.1.当前工程设置1、选择IDEA中File=>Settings=>Build,Execution,Deployment=>BuildTools=>Maven2、设置IDEA使用本地安装的Maven,并修改配置文件及本地仓库路径Maven......
  • 【Maven】Maven概述
    01.初识Maven1.1.什么是MavenMaven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。官网:https://maven.apache.org/Apache软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利性组织。开源项目......
  • Linux命令——文件管理
    目录1.cd命令进入家目录在两个目录之间切换2.ls命令显示所有文件:显示文件详细信息文件大小单位显示显示目录后缀3.创建删除文件创建文件删除文件4.创建删除目录/文件创建单层目录创建多层目录删除目录5.cp命令拷贝文件拷贝目录6.mv命令文件的移动......
  • 【C++课程设计】通讯录管理系统
    完整代码:开源地址一、任务书 手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(假设每个位置上的存储容量为1000,即手机卡中或手机上最多只能存储1000个联系人)。存储在手机中的联系人的信息只包含姓名和电话号码两项信息。存储......
  • 1832javaERP管理系统之车间计划管理Myeclipse开发mysql数据库servlet结构java编程计算
    一、源码特点 javaerp管理系统之车间计划管理是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助采用了serlvet设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。......
  • Spring初始化之循环依赖
    InjectionMetadata.injectresolveFieldValue解析去解析对象的属性时会自动去解析该属性是否是Bean依赖对象DefaultListableBeanFactory.doResolveDependency会去调用DependencyDescriptor.resolveCandidate方法而DependencyDescriptor.resolveCandidate方法就是回去调用B......
  • 用idea导入maven在打包之后在web.xml文件找不到src/main/resources文件夹下的资源(已解
    一、产生原因这其实是因为在导入ssm项目时候src/main/resources下的配置文件打包丢失造成的二、解决办法1、在确定maven包都导入情况下,只有资源文件找不到(ps:不能修改绝对路径,否则项目跑不起来) 2、此时的resources文件夹是普通文件夹3、点击项目配置 4、因为之前他只是......
  • 【工具推荐】MobaXterm远程终端管理工具史上最全攻略,涉及下载、安装、字体等配置、解
    【强烈推荐】MobaXterm远程终端管理工具史上最全攻略,涉及下载、安装、字体等配置、解决中文乱码、Telnet/ssh/Serial使用教程、高级功能使用技巧等。MobaXterm是一个增强型的Windows终端。其为Windows桌面提供所有重要的远程网络终端工具(如SSH、X11、RDP、VNC、FTP、S......
  • farmOS | 一个免费开源的智慧农场管理系统
    farmOS简介farmOS是一个基于Web的应用程序,用于服务器场管理、规划和记录保存。它由农民、开发人员、研究人员和组织组成的社区开发,旨在为农业数据收集和管理提供标准平台。farmOS服务器建立在Drupal之上,这使得它模块化、可扩展和安全。farmOSFieldKit应用程序通过渐进式W......