讲讲 Maven 依赖

  • 1.依赖配置
  • 2.依赖范围
  • 3.依赖冲突
  • 4.排除依赖

1.依赖配置

配置信息示例:

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

配置说明

  • dependencies: 一个 pom.xml 文件中只能存在一个这样的标签,是用来管理依赖的总标签。
  • dependency:包含在 dependencies 标签中,可以有多个,每一个表示项目的一个依赖。
  • groupId,artifactId,version(必要):依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven 根据坐标才能找到需要的依赖。
  • type(可选):依赖的类型,对应于项目坐标定义的 packaging。大部分情况下,该元素不必声明,其默认值是 jar。
  • scope(可选):依赖的范围,默认值是 compile。
  • optional(可选): 标记依赖是否可选
  • exclusions(可选):用来排除传递性依赖,例如 jar 包冲突

2.依赖范围

classpath 用于指定 .class 文件存放的位置,类加载器会从该路径中加载所需的 .class 文件到内存中。

Maven 在编译、执行测试、实际运行有着三套不同的 classpath:

  • 编译 classpath :编译主代码有效
  • 测试 classpath :编译、运行测试代码有效
  • 运行 classpath :项目运行时有效

Maven 的依赖范围如下:

  • compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种都有效,即在编译、测试和运行的时候都要使用该依赖 Jar 包。
  • test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要。
  • provided :此依赖范围,对于编译和测试有效,而对运行时无效。比如 servlet-api.jar 在 Tomcat 中已经提供了,我们只需要的是编译期提供而已。
  • runtime:运行时依赖范围,对于测试和运行有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现。
  • system:系统依赖范围,使用 system 范围的依赖时必须通过 systemPath 元素显示地指定依赖文件的路径,不依赖 Maven 仓库解析,所以可能会造成建构的不可移植。

3.依赖冲突

1、对于 Maven 而言,同一个 groupId 同一个 artifactId 下,只能使用一个 version。

<dependency><groupId>in.hocg.boot</groupId><artifactId>mybatis-plus-spring-boot-starter</artifactId><version>1.0.48</version>
</dependency>
<!-- 只会使用 1.0.49 这个版本的依赖 -->
<dependency><groupId>in.hocg.boot</groupId><artifactId>mybatis-plus-spring-boot-starter</artifactId><version>1.0.49</version>
</dependency>

若相同类型但版本不同的依赖存在于同一个 pom 文件,只会引入后一个声明的依赖

讲讲 Maven 依赖相关推荐

  1. 【华为云实战开发】15.Maven依赖的JAR包下载慢?赶紧看过来

    文:华为云DevCloud 亲亲土豆 相信许多JAVA开发者在日常工作中时常会碰到这种情况,那就是编译Maven工程时,工程所依赖的jar包文件下载非常慢,甚至经常出现下载不成功的问题,今天,小编就给 ...

  2. maven依赖的添加

    maven可是个管理jar依赖的好玩意,不用再关心导这个jar包那个jar包,这个jar包是谁家的,和谁有啥关系.有了maven,简简单单就搞定,下面以eclipse为例,在一个springboot项 ...

  3. 又出现依赖冲突?试试 IDEA 解决 Maven 依赖冲突的高能神器!

    以下文章来源方志朋的博客,回复"666"获面试宝典 1.何为依赖冲突 Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的.Maven的依赖机制会导致Jar包的冲突.举个 ...

  4. 是时候装逼了,试试 IDEA 解决 Maven 依赖冲突的高能神器!

    点击关注公众号,Java干货及时送达 来源 | segmentfault.com/a/1190000017542396 1.何为依赖冲突 Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的 ...

  5. 解决Maven依赖冲突的好帮手,这款IDEA插件了解一下?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:桔子214032 segmentfault.com/ ...

  6. 解决 Maven 依赖冲突的好帮手,必须了解一下!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:桔子214032 sf.com/a/119000001754 ...

  7. 碰到Maven依赖冲突,想砸电脑?这个IDEA插件必须了解一下...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:https://urlify.cn/mAj6Nj # 何为依 ...

  8. 漫画谈一下Maven依赖,百分之90的同学不知道!

    Maven 依赖排除(Exclusions) 因为 Maven 构建的项目具有依赖可传递的特性,当你在 pom.xml添加某个依赖时,可能也会引入不需要的依赖到你的项目中,这将会会可能引起如下问题: ...

  9. [笔记]解决m2eclipse给项目添加maven依赖管理时可能不给项目的build path...

    为什么80%的码农都做不了架构师?>>>    解决办法:在m2eclipse提供的菜单里关闭项目的Maven依赖管理,然后再启动Maven的依赖管理!!! 检查:1)查看项目的.c ...

最新文章

  1. ansible2.7学习笔记系列
  2. conda create -n python 3.6_conda创建python环境
  3. Hark的数据结构与算法练习之图书馆排序
  4. idea2020 需要热部署吗_小微制造企业需要部署MES系统吗?
  5. [html] 举例说明写一个button的按钮的方法有哪些?
  6. js练习8(幻灯片切换效果)
  7. 错误3:系统找不到指定的路径
  8. pythonmysql数据分析_利用Mysql进行python的数据分析
  9. 基于百度万年历定制化 1
  10. 小龙 Dev-C++ 5.16 发布了
  11. 牛客寒假算法集训营1 小a与军团模拟器(启发式合并)
  12. 武汉java开发工资一般多少_武汉Java开发工资是否还会增长?工资为什么那么高?...
  13. 拿到外卖后秒退单,一连12天吃霸王餐的女子栽了!
  14. 云安全类型及预防方法
  15. King of Glory刷金币脚本
  16. SQL语句如何实现模糊查询
  17. 2021-07-29 Ubantu18.04下Cura编译
  18. 计算机系统实验四:二进制程序逆向工程
  19. java计算机毕业设计-医院门诊分诊信息系统-源码+系统+mysql数据库+lw文档
  20. 开源媒介软文推广智能发布系统PHP源码

热门文章

  1. 专家观点 | 梁希同:为什么研究章鱼、乌贼 ——来自海洋智慧生物的启示
  2. 集中监控计算机主要功能
  3. CSS 背景+CSS文本样式
  4. Z世代工程文化:如何带好95后工程师组成的开发团队?
  5. 数据结构和算法 堆排序 (图解堆调整)
  6. SwiftUI onReceive 基础教程
  7. spring cloud gateway+nacos 服务下线感知延迟,未及时出现503,请求依然转发到下线服务
  8. VS2017生成解决方案报错,提示对路径的访问被拒绝
  9. python基础练习(3)
  10. Android[art]-Android dex,odex,oat,vdex,art文件结构学习总结