Maven中的DepencyManagement与Dependencies的区别
今天记录一下maven的pom文件中的两个属性:DepencyManagement
,Dependencies
博客比较短,就简单记录.
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的区别相关推荐
- Maven中dependencyManagement标签和dependencies的区别
今天在maven的pom文件中看到了dependencyManagement标签,用法如下: <dependencyManagement><dependencies><d ...
- maven 打包数据库加密_漫画:工作这么多年,你居然不知道 Maven中 Optional 和 Exclusions 的区别?...
Maven 依赖排除(Exclusions) 因为 Maven 构建项目具有依赖可传递的特性,当你在 pom.xml添加某个依赖时,可能也会引入不需要的依赖到你的项目中,这将会会可能引起如下问题: J ...
- maven 中 pom.xml 配置文件标签说明,dependencyManagement和dependencies区别
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 参考:http://zhaoshijie.iteye.com/blog/2094478 http:/ ...
- maven 中 dependencies 与 dependencyManagement 的区别
前言 当前的团队工程项目是一个 maven 工程,里面有多模块,包含了父 pom 与子 pom.而在父 pom 中,我见到了 dependencyManagement 这个东西.我们知道一个 mave ...
- maven中DependencyManagement和Dependencies
上次这边朋友问我一个问题,就是他们在pom.xml中的dependency中,看到有一些是<scope>provided</scope>的情况,比如如下: 双击代码全选 1 2 ...
- 获取公司的maven库 和 idea maven 中Projects Settings的Libraries中正常,但是在Maven Projects中Dependencies一直出现红线的解决办法
一.获取公司的maven库. (1)我点击 Maven Projects 的 设置(如果idea页面上没有Maven Projects 这个框,那就去view->Tool Windows-> ...
- Maven中的可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)
1.Maven中依赖概述 Maven中的依赖关系是有传递性的.例如:项目B依赖项目C(B -> C),如果有一个项目A依赖项目B(A -> B)的话,那么项目A也会依赖项目C(A -> ...
- Maven中optional和exclusion的区别
用了那么久的Maven,我们都知道Maven的依赖关系具有传递性,比如A依赖B,B依赖C,那么A也依赖于C,具体在项目中的表现见图: 上述依赖在pom.xml中的关系是这样的: C(cc-spring ...
- maven中snapshot版本和正式版本的区别
参考链接:https://www.cnblogs.com/huang0925/p/5169624.html 理解Maven中的SNAPSHOT版本和正式版本 Maven中建立的依赖管理方式基本已成为J ...
最新文章
- PyQt5 技术篇-QTableWidget表格组件指定行的隐藏与显示控制实例演示,设置表格指定列的列宽方法
- 不同图像锐化算子提取的图像信息有哪些不同_传统图像处理
- 【转载】飞鸽传书2013【绿色版】
- 王道 —— 操作系统的运行机制和体系结构
- Python 模块学习
- STM32工作笔记0069---汉字显示实验
- eShopOnContainers学习系列(二):数据库连接健康检查
- 如何使用API爬取数据,它和网页爬虫有什么区别?
- (转)DirectX不是全部!3D游戏图形技术解析
- html文字发亮_CSS3字体发光效果
- Pointer Networks简介及其应用
- [JAVA安全webshell]冰蝎jsp木马分析
- Ubuntu20安装erlang和rabbitmq
- 2013c语言二级等级考试试题,计算机等级考试二级c语言考试试题
- 如何将json数据并格式化—html
- 得之坦然,失之淡然,顺其自然,争其必然。真的太经典了啊!
- SRM 475 DIV1 900
- 【Linux】cron 与 crontab
- 三跨),总分420+
- 世界上最远的距离 --- 泰戈尔的诗
热门文章
- 学习Timer类,定制自己的调度器一
- canvas学习——toDataURL()方法
- C#从基于FTPS的FTP server下载数据 (FtpWebRequest 的使用)SSL 加密
- React Native 学习资源精选仓库
- 机器学习(王衡军)练习题及答案
- java如何实现pcm流转trmp流
- 迷宫问题 回溯 C++
- 《Crafting A Tiny Open World: A Short Hike Postmortem》独立游戏开发分享
- 圆排列公式推导_n个数第k个全排列-环状全排列公式如何理解环状全排列公式n!/ – 手机爱问...
- 报错“/control/tmp.mail.zhaoZhongHai.zzh:180111: No such file or directory”