[maven] dependency标签理解

时间:2023-03-09 18:06:57
[maven] dependency标签理解

在maven pom.xml文件中最多的就是dependency标签,我们用maven管理我们项目的依赖。这篇文章简单介绍dependency标签内部各个子标签的意义。

下面是dependency标签的格式

<dependencies>
    <dependency>
        <groupId/>
        <artifactId/>
        <version/>
        <type/>
        <scope/>
        <systemPath/>
    </dependency>
    ...
</dependencies>

下面我们分别来讨论其中的各个子标签:

1. groupId
这个标签主要用来唯一标识一个项目或者一组项目,它通常是java包名的全称,例如: io.netty, com.google;

2. artifactId
artifactId用来标识同一groupId下不同的项目,例如: netty-all, netty-handler

3. type
主要用来指明依赖的类型,例如: jar, war, pom,ear等;

4. version
用来标识一个生成物(artifact)的版本,例如: 1.1, 2.0-SNAPSHOT, 4.0.31.Final;

5. classifier
用来区分相同的pom文件下,不同环境构建出的生成物(artifact), 例如: javadoc, sources, jdk16, jdk17

所以一个项目在maven仓库的坐标(coordinate)全称可以表达如下:
artifactId:groupId:packing:version:classifier
例如: io.netty:netty-all:4.0.31.Final

任何pom.xml文件中都必须明确定义生成物(artifact)的坐标(coordianate), 例如:

<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.0.31.Final</version>
<packaging>jar</packaging>

上述的pom定义,最终生成的成果物的名称会遵循如下的格式:
<artifactId>-<version>.<packaging>

上述的pom定义的成果物的名称将是:
netty-all-4.0.31.Final.jar

6. scope
这个scope用来表示当前的依赖所作用的场景(即应该把它添加哪个环境中),它的取值主要有如下几个:
1. compile
2. runtime
3. optional
4. provided
5. test
6. import

7. systemPath
用来依赖本地文件系统的绝对路径的资源,例如,某些jar依赖由于授权关系,maven仓库不提供,必须用户统一相关协议,在指定的通道获取,这时候需要用户把下载的依赖资源保存到文件系统,这时通过maven提供的systemPath把资源引入到maven构建环境中。

文章转载至:https://blog.csdn.net/jjlovefj/article/details/74357388