首页 > 其他分享 >Maven权威指南(1):基本概念和依赖

Maven权威指南(1):基本概念和依赖

时间:2023-07-22 19:46:21浏览次数:41  
标签:指南 ... 依赖 -- classpath Maven 引入 基本概念

基本概念

标志 名称 说明
groupId 组信息 表示这个项目所在的组织或者公司信息
artifactId 唯一Id 表示这个项目在组中的唯一Id
version 版本信息 表示这个项目迭代的版本
packaging 打包方式 定义这个项目的打包方式,默认值为jar,常见值有jar、war、pom
classifier 附属构件 定义构件输出的附属构件,例如项目的javadoc和source包,该字段无法直接定义
name 名称 项目的友好名称,方便查阅

项目构件的文件名:artifactId-version[-classifier].packaging

Maven坐标体系

元素:groupId,artificatId,version,packaging,classifier
通过以上五个元素就可以在仓库中唯一确定一个Maven组件
例如:
我们要查找Java5的TestNG的5.8版本,这个时候它的五元素就是

字段
groupId org.testng
artificatId testng
version 5.8
packaging jar
classifier jdk15

注意:大部分时候可以省略packaging和classifier

Maven 依赖

配置

基础代码如下:

<project>
...
	<dependencies>
		<dependency>
			<groupId>...</groupId>
			<artifactId>...</artifactId>
			<version>...</version>
			<type>...</type>
			<scope>...</scope>
			<optional>...</optional>
			<exclusions>
				<exclusion>...</exclusion>
				....
			</exclusions>
		</denpendenc>
	</dependencies>
...
</project>

如上面代码,groupIdartifactIdversion就是依赖组件的基本坐标信息
type:依赖的类型,对于项目坐标定义的packagine,一般不需要定义,默认为jar
scope: 依赖范围,默认为compile
optional:可选依赖,表示这个依赖是可选的,一般不建议使用
exclusions:排除依赖

依赖范围

背景

  1. Maven项目在编译、测试和运行的时候都会使用不同的classpath用于隔离不同场景下依赖的差异
  2. java中classpath可以理解为java程序所需要的依赖包,也就是常见的lib概念

classpath种类

编译classpath测试classpath运行classpath

依赖范围种类

名称 说明 claspath作用范围
compile 编译依赖范围,默认范围 编译classpath、测试classpath、运行classpath
test 测试依赖范围 测试classpath
provided 已提供依赖范围 编译classpath、测试classpath
runtime 运行时依赖范围 测试classpath、运行classpath
system 系统依赖范围 编译classpath、测试classpath
import 导入依赖范围 不会影响classpath

注意:
system的依赖范围需要和systemPath一起使用,通过systemPath定义依赖文件的路径

传递性依赖

概念

Maven会解析各个直接依赖(也就是直接定义在项目pom.xml文件中的依赖),将那些间接依赖(直接依赖所依赖的组件,支持递归直接最底层的依赖),以传递性依赖的方式引入到当前项目中
好处:

  1. 不需要关心每个依赖所依赖的组件,Maven自动引入
  2. 不同依赖直接可能依赖同个组件,Maven可以自动减少重复引用

传递性依赖与依赖范围关系

compile test provided runtime
compile compile -- -- runtime
test tet -- -- test
provied provided -- -- provided
runtime runtime -- -- runtime

依赖调解

概念

当不同的直接依赖引入相同groupId和artifactId的间接依赖时,需要通过某种机制去确认具体该如何引入哪个直接依赖的间接依赖,这种机制就是依赖调解

规则

  1. 路径最近者最优
  2. 先声明者先使用
    例如:
  3. 存在这样的依赖关系:
    (1). A->B->C->X(1.0)
    (2). A->D->X(2.0)
    则会会通过(2)的方式引入X(规则1
  4. 存在这样的依赖关系:
    (1). A->B->X(1.0)
    (2). A->D->X(2.0)
    则会会通过(1)的方式引入X(规则2

可选依赖

概念:表示这个依赖是可选的,一般适用于标记多个相同类型但是不同实现的间接依赖,由使用方根据自己的需要再引入对应的实现,通过这种方式去按需引入直接需要的依赖
作用

  1. 可选的间接依赖不会直接引入到项目中,需要手动引入
  2. 按需引入间接依赖

排除依赖

代码模板

...
<dependency>
	<groupId>...</groupId>
	<artifactId>...</artifactId>
	<version>...</version>
	<exclusions>
		<exclusion>
			<groupId>...</groupId>
			<artifactId>...</artifactId>
		<exclusion>
	</exclusions>
</dependency>
...

作用:用于排除掉依赖中一些项目中不需要的间接依赖(可能因为依赖冲突、license违法、snapshot版本)
注意:声明exclusion时只需要groupId和artifactId即可,不需要version等信息,因为只需要这两个信息就可以唯一定位依赖图中的某个依赖

优化依赖

作用:排除多余的依赖,显示地声明某些必要的依赖
方法

  1. mvn dependency:list 查询当前项目的依赖
  2. mvn dependency:tree 查询挡墙项目的依赖树,可以直接看出某个依赖是如何引入的
  3. mvn dependency:analyze 自动分析项目中异常依赖(没有显式声明的依赖和未使用但是显式声明的依赖)
    注意:异常依赖需要人为确认、分析是否真的可以排除,因为有些代码是动态生产的,这种场景Maven无法分析到该jar包实际上是被引用了

标签:指南,...,依赖,--,classpath,Maven,引入,基本概念
From: https://www.cnblogs.com/magic-code-art/p/17574082.html

相关文章

  • IDEA中打开新项目maven默认配置
    前言想必大家都为IDEA中打开新项目时重新配置Maven所苦恼过吧。每次都配置,整个人都不好了,其实只要为新项目设置默认的Maven配置就可以完美解决问题解决方法依次点击File-->NewProjectsSettings-->SettingforNewProjects在搜索框中搜索maven把Mavenhomepath、Userse......
  • 文心千帆:PPT 制作、数字人主播一键开播等数十种应用场景惊艳到我了,下面给出简介和使用
    文心千帆:PPT制作、数字人主播一键开播等数十种应用场景惊艳到我了,下面给出简介和使用指南,快去使用起来吧文心千帆大模型平台是面向企业开发者的一站式大模型开发及服务运行平台。文心千帆不仅提供了包括文心一言底层模型(ERNIE-Bot)和第三方开源大模型,还提供了各种AI开发工具和整......
  • maven学习笔记
    1、maven的两大核心内容:依赖管理:对jar的统一管理(Maven提供了一个Maven的中央仓库,https://mvnrepository.com/,当我们在项目中添加完依赖之后,Maven会自动去中央仓库下载相关的依赖,并且解决依赖的依赖问题。),也可以是自己的仓库。项目构建:对项目进行编译、测试、打包、......
  • 使用API接口获取淘宝商品数据的详细指南
    ​在电商行业中,淘宝作为中国最大的在线购物平台,每天有数以百万计的商品被发布和交易。作为程序员,如果需要获取淘宝商品的详细数据,可以通过调用API接口来实现。本文将详细介绍如何使用淘宝API接口获取商品详情数据,并附带代码示例,帮助程序员轻松实现相关功能。一、了解淘宝开放......
  • Ubuntu 20.04使用 VNC远程桌面连接避坑指南
    自从开始使用Ubuntu20.04搭建深度学习服务器,就想到使用VNC远程桌面连接使用。可是之前一直使用的是Ubuntu18.04,心里想着设置应该不难,结果在配置的时候总出现无法连接的错误。下面我就分享一下我使用TigerVNC配置远程桌面连接过程中遇到的问题和解决方法。本文使用的软件版本和使......
  • Ubuntu 20.04使用 VNC远程桌面连接避坑指南
    自从开始使用Ubuntu20.04搭建深度学习服务器,就想到使用VNC远程桌面连接使用。可是之前一直使用的是Ubuntu18.04,心里想着设置应该不难,结果在配置的时候总出现无法连接的错误。下面我就分享一下我使用TigerVNC配置远程桌面连接过程中遇到的问题和解决方法。本文使用的软件版本和使......
  • Ubuntu 20.04使用 VNC远程桌面连接避坑指南
    自从开始使用Ubuntu20.04搭建深度学习服务器,就想到使用VNC远程桌面连接使用。可是之前一直使用的是Ubuntu18.04,心里想着设置应该不难,结果在配置的时候总出现无法连接的错误。下面我就分享一下我使用TigerVNC配置远程桌面连接过程中遇到的问题和解决方法。本文使用的软件版本和使......
  • 《算法竞赛进阶指南》选记录
    书上有些好题,经典套路,全部看看不过来,选择性记录一下,打星号*是自己认为的重点0x00例题最短Hamilton路径 状压dp,主要注意阶段递推问题*NOI2014起床困难综合症 位运算相关题目常用的:各位分离,贪心高位往低填货仓选址典中典,一个最小化绝对值和式的问题,选中位数七夕祭行列分......
  • 财大ACM实验室招新指南
    财大ACM实验室招新指南ACM科普大学竞赛ACM通俗是指XCPC,也就是ICPC/CCPC。其中ICPC即InternationalCollegiateProgrammingContest,它是国际大型比赛。也在中国高等教育学会列出的榜单上。属于国际竞赛。如果能在ICPC区域赛拿到银牌、金牌。国内的一些公司可能就会向你投出......
  • 财大ACM招新指南
    财大ACM实验室招新指南ACM科普大学竞赛ACM通俗是指XCPC,也就是ICPC/CCPC。其中ICPC即InternationalCollegiateProgrammingContest,它是国际大型比赛。也在中国高等教育学会列出的榜单上。属于国际竞赛。如果能在ICPC区域赛拿到银牌、金牌。国内的一些公司可能就会向你投......