dependencies标签的用法
1.概述
本文章描述了dependencies标签的基本用法,附上自己的一些理解。如有不对之处欢迎指正!具体详细请参考【官方文档】
2.示例
dependencies标签主要用于管理项目中需要引入的其他依赖。
如下示例是dependencies标签中会出现的标签及简单概述
<project>
...
<dependencies>
<dependency>
<!--组织ID-->
<groupId></groupId>
<!--项目ID-->
<artifactId></artifactId>
<!--版本号-->
<version></version>
<!--依赖类型-->
<type></type>
<!--类别(类目)-->
<classifier></classifier>
<!--指定依赖的范围-->
<scope></scope>
<!--指定本地jar路径,和scope一起使用-->
<systemPath></systemPath>
<!--排除依赖列表-->
<exclusions>
<exclusion>
<artifactId></artifactId>
<groupId></groupId>
</exclusion>
</exclusions>
<!--指定是否需要被依赖-->
<optional></optional>
</dependency>
</dependencies>
...
</project>
3.dependencies中标签使用
- groupId,artifactId,version:
首先绝大部分依赖可以通过groupId,artifactId,version这三个标签找到唯一的依赖项,为什么说绝大部分而不是全部呢?这里就要引入下面这个标签的作用classifier - classifier:
classifier主要两个作用:
1、可以简单地看做字符串的拼接,一般跟在groupId,artifactId,version标签后面使用,用于区分不同的工作环境。
典型的就有json-lib这个项目:maven仓库链接,版本一样,运行的jdk不一样:
此时项目中如果需要引用json-lib这个依赖,只靠groupId,artifactId,version这三个元素不能准确找到需要的项目,此时在这里我们指定jdk15就可以准确的从中央仓库获取到我们需要的依赖
- 注意:classifier相当于字符串拼接,只能跟在groupId,artifactId,version后面。
- 错误示例:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<classifier>jdk13</classifier>
<version>2.2.2</version>
</dependency>
上面定义的依赖最终会在中央仓库查找json-lib-jdk13-2.2.2.jar
2、classifier的另一个作用是可以再classifier中指定sources和javadoc,这样引入的依赖就会附带上源码或者api文档等信息
-
type:
官方文档指定的type类型有如下几种:pom,jar ,test-jar,maven-plugin,ejb,ejb-client,war,ear,rar,java-source,javadoc,如果不指定,默认为jar.一般开发中常用的是jar,war,pom等。具体参见官方说明 -
scope:
scope主要用于指定依赖的作用范围,其中有如下取值:取值 作用范围 依赖关系 compile maven的默认范围,作用在所用范围 可以依赖传递 provided 只在编译和测试时生效,正式发布jar包或者war包时 该依赖不会被包含进去 不会传递 runtime 只在运行时和测试时生效,典型的是数据库驱动依赖 可以依赖传递 test 只在测试时生效 不会依赖传递 system 表明该依赖不会从中央仓库查找,而是从用户指定的systemPath位置获取,与systemPath共同使用 是 -
systemPath:
仅当scope为system时才可以使用。否则,如果设置了这个元素,构建时将会失败。systemPath的路径必须是绝对路径,这里可以利用properties的属性来指定。例如${java.home}/lib。
官方建议如无必要不要用此方式,可以先将依赖安装到maven仓库后在做引入。具体安装依赖到Maven可以参考如下:Maven命令之–mvn install:install-file -
exclusions:
排除依赖中不需要的项 -
optional:
默认值:false。optional=true 表示此依赖包不会在其他项目中被引用加载、不参与maven的依赖传递。