原文地址:https://blog.csdn.net/sinat_32034679/article/details/69517838

在一个maven项目中,依赖是十分重要的一部分,所以单独列出一个章节来说明。 
在pom.xml文件中,project下直接嵌入的是一个<dependencies>标签,然后里面嵌入若干个<dependency>标签。 
这是一个常见的dependency标签:

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.3.2</version>
</dependency>

下面是一个“复杂”的dependency标签:

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.3.2</version><scope>compile</scope><systemPath>./commons-lang3.jar</systemPath><exclusions><exclusion><artifactId>aopalliance</artifactId><groupId>aopalliance</groupId></exclusion></exclusions><optional>false</optional>
</dependency>

注意其中红色的部分: 
<scope>:表明此依赖的作用域。有如下取值: 
compile:默认。表明此依赖在任何时刻都生效。包括编译、测试、运行。 
test :表明此依赖只在测试时生效。例如junit.jar。最终的打包是不会被包含的。 
provided:表明此依赖在目标环境中已经存在。例如servlet-api.jar,它在tomcat里已经提供了,打包时是不需要打到war文件中的。 
runtime:表示此依赖只在目标环境中运行时才需要,编译时不需要,例如MySQL-connector.jar等这些数据库驱动。因为这些依赖是具体的实现,是不会被代码直接使用的。 
system :表示此依赖是来自外部jar,而不是maven仓库。当scope设置为此值时,systemPath属性才会生效,systemPath为一个物理文件路径,来指定依赖的jar其物理磁盘的位置。

<systemPath>:见scope为system的说明。 
<exclusion> :用来排除传递的依赖。例如project1依赖jarA,jarA 依赖jarB。当引入jarA时,jarB也会被引入(在maven中,这被称为依赖传递<transferdependency>)。在某些情况下如果不想jarB被引入,则可以使用exclusion标签来进行控制。 
<optional> :默认值为false。此标签也是用于控制依赖传递的。如果将此值设置为true。则默认情况下此依赖不会被传递,除非在引用中显式引用此依赖。例如project1依赖jarA,jarA 依赖jarB,在jarA中引用jarB时,jarB被标记为optional,此时在project1的依赖中就不会包含jarB,如需使用jarB,需要显式引用jarB。

总结:以上配置在通常情况下使用频率为“较频繁”,所以还是需要掌握的。scope的system是不被maven官方推荐的,所以要慎用。exclusion标签可以排除传递的依赖,这样可以解决某些依赖冲突。依赖冲突另一种简单的解决办法就是将冲突的依赖显式引用下,这样maven就会使用指定的这个依赖,而不是自行判断该使用哪个依赖(其实maven对依赖的管理是采用树形结构的,树顶端会”覆盖”底端的,所以显式引用某个依赖能够解决依赖冲突。依赖冲突还有一种较复杂的办法就是使用dependencyManagement,小伙伴可以自行学习下)。

转载自 
Dependency依赖

dependency标签相关推荐

  1. pom.xml中的dependency标签的classifier

    classifier元素用来帮助定义构件输出的一些附属构件.附属构件与主构件对应,比如主构件是 kimi-app-2.0.0.jar 该项目可能还会通过使用一些插件生成 如 kimi-app-2.0. ...

  2. maven项目的pom.xml 标签的含义

    下面是我新建一个maven项目后生产的pom.xml <?xml version="1.0" encoding="UTF-8"?> <proj ...

  3. maven项目pom.xml中parent标签的使用

    本文来说下maven项目pom.xml中parent标签的使用 文章目录 parent标签 parent标签由来 依赖排除 本文小结 parent标签 parent标签使用例子 <!--父项目的 ...

  4. Duplicated tag: ‘build‘出现此报错是因为标签配置重复。

    Invalid content was found starting with element '{"http://maven.apache.org/POM.xml... build标签爆红 ...

  5. Maven 依赖管理与依赖标签

    原文链接 1.概述 在本教程中,我们将回顾两个重要的Maven标签--dependencyManagement 和 dependencies. 这些特性对于多模块项目特别有用. 我们将回顾这两个标签的 ...

  6. Dependency(依赖)

    在一个maven项目中,依赖是十分重要的一部分,所以单独列出一个章节来说明. 在pom.xml文件中,project下直接嵌入的是一个<dependencies>标签,然后里面嵌入若干个& ...

  7. maven---parent和dependencyManagement标签

    前沿 之前对maven的学习不系统,只是知道简单的使用方法,工作之后才对maven有了更深的学习.接下来小白会利用空闲时间,系统的学习一下maven,并且记录一下maven的学习心得,和大家分享一下. ...

  8. pom中parent标签使用

    maven的核心就是pom.xml,使用maven是为了更好的帮项目管理包依赖.如果要引入一个jar包,需要在pom文件中加上<dependency></dependency> ...

  9. pom.xml文件中的parent标签

    基本概念 maven的核心就算pom.xm,使用maven是为了更好地帮项目管理包依赖.如果要引入一个jar包,需要在pom文件中加上 <dependency><groupId> ...

  10. idea上java接口自动化_Java接口自动化之IDEA创建及运行maven项目

    本文2564字 阅读约需7分钟第195次推送 Maven作为一个项目管理工具,是一组标准集合,一个项目的生命周期.一个依赖管理系统,以下主要介绍IDEA创建及运行maven项目. 01创建maven项 ...

最新文章

  1. python数据结构与算法:单向链表
  2. 我才是世界上最好的编程语言
  3. 微信公众号发多个消息php,微擎系统微信公众号关键字触发回复多条消息实现
  4. android webview拍照,在android 2.2/2.3中使用webview从camera中照相并且上传的实现
  5. 检索数据_5_给字段取个有意义的名字
  6. 春节假期 | 最强抢票攻略
  7. 一年成为博客专家? 致!奋斗的自己
  8. poi 5.2.2 操作word合集之【页眉页脚】
  9. matlab动图启动,MATLAB制作动图或视频
  10. 如何解决安装DreamWeaver8 时候提示“无法将数值写入键/SOFTWARE/classes/.shtml”
  11. WinPE的制作 - 进WinPE后自动运行程序
  12. NOIP2011 洛谷 P1315 观光公交
  13. 企业微信应用授权/静默登录
  14. 小红书主页爬取_小红书数据爬取教程
  15. ios游戏比Android贵,为什么苹果商店充值比安卓的要贵?
  16. 微博运营工具及数据分析实战全集百度云
  17. 北京云端微服科技2017笔试题
  18. 1521端口已被占用解决方案
  19. Vue将图片转化为base64
  20. 商品搜索引擎资料整理

热门文章

  1. 汉王ocr sdk android,汉王标准印刷体OCR SDK技术白皮书.doc
  2. ArcGIS教程:空间参考和地理处理
  3. 微信小程序map组件拖拽地图获取经纬度,地址,带定位点范围(中心点固定)
  4. intellij idea的GitHub安装与使用教程
  5. MATLAB 绘图函数及绘图辅助
  6. Modbus 与 RS485 的区别与联系
  7. 用友python模块_最新用友NC6.5文件上传漏洞
  8. 国科大学习资料--矩阵分析与应用(李保滨)--2015年期末考试试卷
  9. c语言回溯算法数独,数独回溯算法
  10. JDK环境变量配置(win10)