Maven -- dependency详解

article/2025/8/26 17:58:31

PS:部分来源官网文档,翻译不到位,请移步官网

一 :type:个人理解:依赖<dependency>通过其子标签   定位了某个特定的唯一构件,所以type--依赖类型,更准确的说应该是依赖的构件的类型。它指定了应该用什么样的插件来处理该构件。

构件:在Maven中,任何依赖(jar包,tomcat等),或项目(自己打包的jar,war等)输出都可成为构件。每个构件都有自己的唯一标识(唯一坐标),由groupId,artifactId,和version等信息构成,由此,Maven就可以对构件进行版本控制,管理。任何可以被Maven的坐标系统唯一标识的对象都是一个Maven构件,但是,只包含其他POM文件(该文件本身不产生构件,打包方式为pom)使用定义的POM文件也是一个Maven构件。

依赖的类型,通常但并不总是代表依赖文件的扩展名。类型可以映射到不同的扩展名和分类器,类型通常与所使用的包装方式相对应,但也不都是如此。<packaging>xxx</packaging>。常见的有 jar, war, ejb-client, test-jar等等 。另,type的默认值为jar。以下是官网列出的一些默认处理方式列表,但这不是全部。插件也可以通过将extension设置为true,从而产生新的type定义

涉及到插件知识,这里只是提到相关的一部分。The <plugin> element contains informations required for a plugin,其中有个子标签<extensions>, 官网对其的解释为:“是否从该插件加载Maven扩展(如打包和类型处理程序 such as packaging and type handlers)。出于性能原因,这应该只在必要时启用,注意:由于技术原因,这个字段的类型是String,而语义类型实际上是Boolean,默认为false” 。这中间的细节暂不做深究,这里主要是弄清type的概念意义。

想起以前看到的一句话,Maven就是一个插件集合,(以下是我个人观点,我不确定是否正确)我认为任何构件都是通过一些插件按照其pom文件指定的build方式产生的,该过程可以指定插件以及插件的工作方式,也可以完全采取默认方式。约定由于配置。

同一个工程,其build方式不同,自然也会产生不同的构件。所以我们在指定依赖的时候,有时若我们想依赖的并不是jar类型的构件,则需要指出其type,若有必要,还需更进一步指出其分类器classifier。实际上,通过gav确定的坐标体系并没有具体到某一个构件,它真正指向的可能是类似这样的一组文件,默认会在文件中选择默认值 type 为 jar, calssifier 为 null 的那份构件(我们可以称之为主构件和附加构件吧)用于匹配dependency引用的最小信息集实际上是{groupId,artifactId,version,type,classifier},然而多数情况下,这些依赖关系将引用的通常是没有classifier的jar依赖。所以我们不需要补充type和classifier信息,因为type的默认值是jar,并且默认classifier为null

然而,在下列这种情况下,光靠gav已经找不到对应构件了,这时候便需要classifier指定特定版本

二:classifier:构件分类器,帮助定义构建输出的一些附属构件。如spring-core.jar,还生成有文档javadoc.jar,源码sources.jar。通常追加组成构件的文件名,跟在version之后,默认为null。通过指定分类器,可以指向不同的附加构件,比如sources和javadoc。它也可以用于区分 由同一份pom但build方式不同生成的一组构件,如上例中使用jdk13和jdk15。注意:type通常是和classifier一起使用的,两者具有配对关系,两者不匹配会导致找不到指定构件。

其他属性参考文章https://blog.csdn.net/VVVZCS/article/details/81625547,暂时没空深究


http://chatgpt.dhexx.cn/article/yefZZ8XY.shtml

相关文章

MySQL中“full outer join“的实现

一: 先创建两个表 二: 使用【left join】 union 【right join】 select t1.dim_a, t1.qty qty_a, t2.dim_a dim_b, t2.qty qty_b from ta t1 left join tb t2 on t1.dim_at2.dim_a union select t1.dim_a, t1.qty qty_a, t2.dim_a dim_b, t2.qty qty_b from ta t1 right join…

left join 和 left outer join 的区别

通俗的讲&#xff1a; A left join B 的连接的记录数与A表的记录数同 A right join B 的连接的记录数与B表的记录数同 A left join B 等价B right join A table A: Field_K, Field_A 1 a 3 b 4 c table B: …

SQL中inner join、outer join和cross join的区别

缺省情况下是inner join,开发中使用的left join和right join属于outer join,另外outer join还包括full join.下面我通过图标让大家认识它们的区别。 现有两张表&#xff0c;Table A 是左边的表。Table B 是右边的表。其各有四条记录&#xff0c;其中有两条记录name是相同的&…

SQL Server中CROSS APPLY和OUTER APPLY应用

1.Cross Apply和Outer Apply的理解 新增的APPLY表运算符把右表表达式应用到左表表达式中的每一行。 它不像JOIN那样先计算哪个表表达式都可以&#xff0c;APPLY必选先逻辑地计算左表达式。这种计算输入的逻辑顺序允许把右表达式关联到左表表达式。 APPLY有两种形式&#xff0…

深夜学习:有关Inner、Outer等相关词汇的理解

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈引流关键词: 内存屏障, DSB,DMB,ISB,inner,outer,memory barrier,Non-cacheable,Cacheable, non-shareable,inner…

外连接(OUTER JOIN)

9.3.4 外连接&#xff08;OUTER JOIN&#xff09; 不管是内连接还是带WHERE子句的多表查询&#xff0c;都组合自多个表&#xff0c;并生成结果表。换句话说&#xff0c;如果任何一个源表中的行在另一个源表中没有匹配&#xff0c;DBMS将不把该行放在最后的结果表中。 而外连…

CROSS APPLY和OUTER APPLY的区别

CROSS APPLY和OUTER APPLY的区别 APPLY语法 在SQL中&#xff0c;有这样的一种查询方式&#xff0c;APPLY语法&#xff1a;微软添加了这个新的运算符用于关联一个带有函数的结果集&#xff0c;并把函数应用于表/视图中的每一个限定行中。这个运算符就是APPLY&#xff0c;APPLY的…

图解inner join和outer join的区别

一张图可以完美诠释区别&#xff1a;

lateral view 和 lateral view outer的区别

lateral view 为侧视图&#xff0c;一般用于行转列的处理中 通常会与explode 搭配使用 1、explode 可以拆分map or array 示例 select explode(split("1,2,3",,)) 结果 123 explode 不适用于多个字段 其中一个字段需要炸开的场景&#xff0c;此时需要搭配late…

left join和left outer join 有什么区别?这样解释通俗易懂

作为一名java程序员&#xff0c;求职面试时也会遇到mysql问题&#xff0c;有次我到一家软件面试&#xff0c;就遇到有一道笔试题是考核关于sql 的。 left join和left outer join 有什么区别&#xff1f; 关于left join我平时编写sql表关联时用得比较多&#xff0c;但对于left o…

Oracle 数据库中 FULL OUTER JOIN 的作用 ?

当需要同时显示两个表中所有记录时&#xff0c;FULL OUTER JOIN 就非常有用。 FULL OUTER JOIN 返回左表&#xff08;Table A&#xff09;和右表&#xff08;Table B&#xff09;的所有行&#xff0c;并且如果左表或右表中没有匹配的行&#xff0c;则使用 NULL 值填充缺失的部分…

四种连接类型:inner(内连接),left[outer](左外连接),right[outer](右外连接),full[outer](完全外连接)

在from子句中表示连接操作有四种&#xff1a;inner&#xff08;内连接&#xff09;&#xff0c;left[outer]&#xff08;左外连接&#xff09;&#xff0c;right[outer]&#xff08;右外连接&#xff09;&#xff0c;full[outer]&#xff08;完全外连接&#xff09;。 一、理论…

内连接(inner join)与外连接(outer join)小结

转载自 : 内连接&#xff08;inner join&#xff09;与外连接(outer join)小结_蝉 沐 风的博客-CSDN博客_inner join mySQL包含两种联接&#xff0c;分别是内连接(inner join)和外连接(out join),但我们又同时听说过左连接&#xff0c;交叉连接等术语&#xff0c;本文旨在总结这…

np.dot、np.outer、np.matmul、np.multipy、np.inner、np.outer与np.cross几个函数之间的区别

np.dot、np.outer、np.matmul、np.multipy、np.inner、np.outer与np.cross几个函数之间的区别 一、数学上关于【内积】、【外积】的定义和计算1.1 数学上关于【内积/数量积】的定义和计算1.2 数学上关于【外积/叉积】的定义和计算 二、numpy中关于np.dot、np.outer、np.matmul、…

R语言 作图 outer()函数

outer()函数&#xff1a; outer(x,y,func):数组x与y的outer()函数会产生一个二维数组A&#xff0c;它的形状是 c(dim(x),dim(y)).A中对应元素A[x.index,y.index] func(x.index,y.index) outer(x,y):默认为两向量外积,即outer(x,y,x*y) x (x1,x2,x3),y (y1,y2,y3) #绘制曲…

[SPI]SPI协议详解

1.SPI协议简介 1.1.SPI协议概括 SPI&#xff0c;是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM&#xff0c;FLASH&#xff0c;实时时钟&#xff0c;AD转换器&a…

【FPGA】SPI协议

1.SPI简介 SPI(Serial Perripheral Interface, 串行外围设备接口)是 Motorola 公司推出的一种同步串行接口技术。SPI 总线在物理上是通过接在外围设备微控制器(PICmicro) 上面的微处理控制单元 (MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它…

SPI接口协议详解

一、SPI总线简介 SPI总线是摩托罗拉公司开发的一种高速、全双工、同步的通信总线&#xff0c;它通常由四条线组成&#xff1a; CS 片选信号SCLK 时钟信号MOSI 主机输出从机输入接口MISO 主机输入从机输出接口 SPI分为主机和从机&#xff0c;主机提供通信所需的时钟信号。 二…

SPI通信协议

串行外设接口&#xff08;SPIV3&#xff09;模块描述 1.1简介 SPI组件允许MCU与外设之间进行同步串行通信。软件可以轮询SPI状态标识或可以中断驱动的SPI操作。 1.1.1特性 SPIV3包含以下特性&#xff1a; 主模式与从模式准模式从选择输出带有CPU中断能力的模式故障标识位双…

SPI协议解析

SPI协议解析 概述接口SPI四种通信模式示例最后 概述 SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节约了芯片…