今天记录一下maven的pom文件中的两个属性:DepencyManagementDependencies

博客比较短,就简单记录.


Dependencies

这个属性大家应该比较熟悉,就是引入依赖。这个属性可以算是pom文件的灵魂。里面可以放入若干的dependency,而dependency内可以放入jar包的坐标。有了这些坐标后,maven就会根据这些坐标去下载对应的jar。同时还会处理里面的依赖关系。

DepencyManagement

这个属性,目前我用的比较少。因为现在我还处于在单体应用开发阶段。即所有模块(用户模块、购物车模块、订单模块等等)都挤在一块。最终也是打成一个jar/war包发布到线上,所以整个应用就一个pom文件。而需要用到什么依赖直接写在Dependencies中即可。

而现在的软件开发趋势是分布式开发,也意味这一个应用内的很多模块会分开部署。会有很多的pom文件出来,这些pom文件中难保就会有相同的依赖坐标。这个时候程序思维就出来了,我们需要提高复用性,就要抽取出来。

这个时候DepencyManagement作用就出来了,我们可以在父工程的pom文件中添加这个属性,然后把重复的依赖坐标放入里面包括 <groupid>,<artifactId>,<version> 。接着在子模块的pom文件中引用父工程即可(<parent>标签)。同时记得要在子模块中引入所需的依赖(<dependency>标签内)。

这样之后,虽然子模块还是要写一些重复的依赖坐标。但可以不用指定版本号了,因为父工程帮我们统一了版本号。还有一个好处,假设要升级mybatis的版本号,那我们直接在父工程的pom文件中的<DepencyManagement>属性内,修改对应坐标的版本号即可,无需在一个又一个的子模块pom文件中修改。也降低了版本升级的开销。

有一个应用例子,比如我们开发一个SpringBoot应用时,我们在pom文件中不是引入了一个父工程吗:

  <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version></parent>

这样之后,还需要什么依赖就引入,而不用指定版本号:

     <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

因为像上文说的,父工程已经帮我们统一了版本号了。

最后需要提一点,父工程只是声明依赖,并不是真正的引入。真正的引入还是在子模块内声明坐标,maven才会去联网下载jar包。有点像接口与实现类的关系吧。

感谢观看。

Maven中的DepencyManagement与Dependencies的区别相关推荐

  1. Maven中dependencyManagement标签和dependencies的区别

    今天在maven的pom文件中看到了dependencyManagement标签,用法如下: <dependencyManagement><dependencies><d ...

  2. maven 打包数据库加密_漫画:工作这么多年,你居然不知道 Maven中 Optional 和 Exclusions 的区别?...

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

  3. maven 中 pom.xml 配置文件标签说明,dependencyManagement和dependencies区别

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 参考:http://zhaoshijie.iteye.com/blog/2094478 http:/ ...

  4. maven 中 dependencies 与 dependencyManagement 的区别

    前言 当前的团队工程项目是一个 maven 工程,里面有多模块,包含了父 pom 与子 pom.而在父 pom 中,我见到了 dependencyManagement 这个东西.我们知道一个 mave ...

  5. maven中DependencyManagement和Dependencies

    上次这边朋友问我一个问题,就是他们在pom.xml中的dependency中,看到有一些是<scope>provided</scope>的情况,比如如下: 双击代码全选 1 2 ...

  6. 获取公司的maven库 和 idea maven 中Projects Settings的Libraries中正常,但是在Maven Projects中Dependencies一直出现红线的解决办法

    一.获取公司的maven库. (1)我点击 Maven Projects 的 设置(如果idea页面上没有Maven Projects 这个框,那就去view->Tool Windows-> ...

  7. Maven中的可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)

    1.Maven中依赖概述 Maven中的依赖关系是有传递性的.例如:项目B依赖项目C(B -> C),如果有一个项目A依赖项目B(A -> B)的话,那么项目A也会依赖项目C(A -> ...

  8. Maven中optional和exclusion的区别

    用了那么久的Maven,我们都知道Maven的依赖关系具有传递性,比如A依赖B,B依赖C,那么A也依赖于C,具体在项目中的表现见图: 上述依赖在pom.xml中的关系是这样的: C(cc-spring ...

  9. maven中snapshot版本和正式版本的区别

    参考链接:https://www.cnblogs.com/huang0925/p/5169624.html 理解Maven中的SNAPSHOT版本和正式版本 Maven中建立的依赖管理方式基本已成为J ...

最新文章

  1. PyQt5 技术篇-QTableWidget表格组件指定行的隐藏与显示控制实例演示,设置表格指定列的列宽方法
  2. 不同图像锐化算子提取的图像信息有哪些不同_传统图像处理
  3. 【转载】飞鸽传书2013【绿色版】
  4. 王道 —— 操作系统的运行机制和体系结构
  5. Python 模块学习
  6. STM32工作笔记0069---汉字显示实验
  7. eShopOnContainers学习系列(二):数据库连接健康检查
  8. 如何使用API爬取数据,它和网页爬虫有什么区别?
  9. (转)DirectX不是全部!3D游戏图形技术解析
  10. html文字发亮_CSS3字体发光效果
  11. Pointer Networks简介及其应用
  12. [JAVA安全webshell]冰蝎jsp木马分析
  13. Ubuntu20安装erlang和rabbitmq
  14. 2013c语言二级等级考试试题,计算机等级考试二级c语言考试试题
  15. 如何将json数据并格式化—html
  16. 得之坦然,失之淡然,顺其自然,争其必然。真的太经典了啊!
  17. SRM 475 DIV1 900
  18. 【Linux】cron 与 crontab
  19. 三跨),总分420+
  20. 世界上最远的距离 --- 泰戈尔的诗

热门文章

  1. 学习Timer类,定制自己的调度器一
  2. canvas学习——toDataURL()方法
  3. C#从基于FTPS的FTP server下载数据 (FtpWebRequest 的使用)SSL 加密
  4. React Native 学习资源精选仓库
  5. 机器学习(王衡军)练习题及答案
  6. java如何实现pcm流转trmp流
  7. 迷宫问题 回溯 C++
  8. 《Crafting A Tiny Open World: A Short Hike Postmortem》独立游戏开发分享
  9. 圆排列公式推导_n个数第k个全排列-环状全排列公式如何理解环状全排列公式n!/ – 手机爱问...
  10. 报错“/control/tmp.mail.zhaoZhongHai.zzh:180111: No such file or directory”