Maven实践(六)---依赖的坐标和定位

本文介绍了Maven中的坐标元素,包括groupId、artifactId、version和packaging,以及dependency的配置,如scope(compile、test、provided、runtime、system、import)、optional和exclusions。同时,解释了依赖范围如何影响classpath以及传递性依赖的处理原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Maven中的主要坐标元素

groupId:

定义当前Maven项目隶属的实际项目(Maven项目和实际项目不一定一一对应,一个实际项目往往被划分为多个模块),groupId不应该对应项目隶属的组织或公司

artifactId:

该元素定义实际项目中的一个Maven项目(模块)【一般是使用实际项目名称作为artifactId的前缀】

version:

该元素定义Maven项目当前所处的版本

packaging:

该元素定义Maven项目的打包方式(打包方式与所生成的构建的拓展名对应 )

classifier:

该元素帮助定义构建输出的一些附属构建(例如Java文档和源代码,javadoc和sources就是这两个附属构建的classifier)

依赖的配置

一般的依赖包括如下的一些元素:

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

根元素project下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个项目依赖

每个依赖包含的元素:
groupId、artifactId、version:

依赖的基本坐标(Maven根据基本坐标才能找到需要的依赖)

type:

依赖的类型,对应于项目坐标定义的packaging,大部分情况下不用声明,默认为jar

scope:

依赖的范围(用来控制依赖和三种classpath【编译classpath、测试classpath、运行classpath】的关系)

Maven有以下几种依赖:

  1. compile:编译依赖范围,如果没指定,默认使用该范围【使用此依赖范围的Maven依赖,在编译、测试、运行三种classpath都有效

  2. test:测试依赖范围,只有测试classpath有效

  3. provided:已提供依赖范围,编译和测试classpath有效

  4. runtime:运行时依赖范围,测试和运行classpath有效

  5. system:系统依赖范围,编译和测试classpath有效,使用该依赖必须通过systemPath元素显示地指定依赖文件的路径【与仓库无关,通常由本机提供,谨慎使用】

  6. import:导入依赖范围,该依赖范围不会对三种classpath产生实际的影响

依赖范围与classpath的关系:

依赖范围(scope)编译classpath测试classpath运行时classpath
compileYYY
test-Y-
providedYY-
runtime-YY
systemYY-

optional:

以来标记是否可选

例如:A->B; B->X(可选), B->Y(可选),那么X,Y这2个可选依赖不会被传递

Tips:在理想情况下,不应该使用可选依赖,因为在面向对象设计中,有一个单一职责性原则,一个类只有一个职责

exclusions:

用来排除传递性依赖,可以包含一个或者多个exclusion子元素

传递性依赖会给项目隐式地引入很多依赖,这极大地简化了项目依赖的管理,但是有些时候这种特性也会带来问题。

依赖范围影响传递性依赖

——compiletestprovidedruntime
compilecompile--runtime
testtest--test
providedprovided-providedprovided
runtimeruntime--runtime

【左边一列表示第一直接依赖,最上面一行表示第二直接依赖】

传递依赖的2个原则:

  1. 路径最近者优先
  2. 第一声明者优先
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值