dependencyManagement与dependencies区别
一、dependencyManagement应用场景
为了项目的正确运行,必须让所有的子模块使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。在我们项目顶层的pom文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
父pom中dependencyManagement如下:
<modules><module>module1</module></modules><properties><spring-version>3.1.1.RELEASE</spring-version></properties><dependencyManagement><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring-version}</version></dependency></dependencyManagement>
子模块module1中dependency声明如下所示:
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId></dependency></dependencies>
这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。
二、dependencies应用场景
相对于dependencyManagement,如果在父pom文件中中通过dependencies引入jar,将默认被所有的子模块继承。
子模块如果希望有自己个性化的内容,可以在子模块中对于其中的某个属性进重新定义。
例如:
父pom中:
<dependencyManagement><dependencies>....<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>3.1</version></dependency>....</dependencies>
</dependencyManagement>
子模块1的pod中:
<dependencies>....<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>3.2</version><exclusions><exclusion><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></exclusion></exclusions></dependency>....</dependencies>
那么,子模块1由于重新定义了spring-web的描述,因此子模块将采用自己的依赖定义,而不再使用pom中默认定义的。
三、dependencyManagement与dependencies区别
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
dependencies即使在子模块中不写该依赖项,那么子模块仍然会从父项目中继承该依赖项(全部继承
)。在实际的项目开发中,推荐在父pom中使用dependencyManagement对项目中使用到的依赖包进行统一的管理。
文章转自
dependencyManagement与dependencies区别相关推荐
- maven 中 pom.xml 配置文件标签说明,dependencyManagement和dependencies区别
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 参考:http://zhaoshijie.iteye.com/blog/2094478 http:/ ...
- dependencyManagement和dependencies的区别
dependencyManagement和dependencies的区别 参考:http://zhaoshijie.iteye.com/blog/2094478 http://blog.csdn.ne ...
- maven中DependencyManagement和Dependencies
上次这边朋友问我一个问题,就是他们在pom.xml中的dependency中,看到有一些是<scope>provided</scope>的情况,比如如下: 双击代码全选 1 2 ...
- dependencies和dependency以及dependencyManagement三者的区别?
首先,这三个maven的pom文件标签都是用来进行包管理的 势力范围由dependencyManagement>dependencies>dependency依次减弱,并且每个标签都是上一 ...
- dependencyManagement与dependencies的区别
dependencyManagement:用于父类管理,一般顶层的父类pom才有 能让所有在子项目中引用一个依赖而不用显式的列出版本号 dependencyManagement里只是声明依赖,并不实现 ...
- cmenu 隐藏子项中的一个子项_区分Maven中dependencyManagement与dependencies的作用
导读:使用maven是为了更好的帮项目管理包依赖,maven的核心就是pom.xml.而maven中有许多的标签,下面我们主要讨论parent.dependencies与dependencyManag ...
- Maven dependencymanagement vs dependencies
dependencyManagement集中管理依赖版本,dependencies节点声明依赖,并从父项目中继承版本号. dependencyManagement允许在不添加所有子继承的依赖项的情况下 ...
- devDependencies与dependencies区别
devDependencies : 命令:npm i xxx --save -dev 同 npm i xxx -D 开发依赖,开发的时候需要运行的辅助的依赖,比如webpack打包工具,babel编译 ...
- maven---parent和dependencyManagement标签
前沿 之前对maven的学习不系统,只是知道简单的使用方法,工作之后才对maven有了更深的学习.接下来小白会利用空闲时间,系统的学习一下maven,并且记录一下maven的学习心得,和大家分享一下. ...
最新文章
- AI伪装目标检测:让变色龙现出原形!
- C++确定一个字符串是否是另一个字符串的排列的算法(附完整源码)
- 机器学习实战-第12章Fpgrowth代码勘误+递归打印效果分析
- how is odata metadata request served 故意把configuration file里的GM6改成GM61之后
- java bouncycastle_java – 使用bouncycastle进行签名和验证签名的正确方法
- Keil | 解决Keil双击工程名无法打开.map的问题
- Kotlin入门(8)空值的判断与处理
- Java 苹果支付applepay服务端验证
- HTML和JavaScript学习笔记
- 前端实现图片验证码效果(数字和字母)
- 以Windows系统搭建基于Ethereum(以太坊)的区块链开发环境(具体操作与截图)
- Web开发者的福利 30段超实用CSS代码
- 解决Grails2.0-M1下 Intellij IDEA 中Controller等无法自动重新加载的BUG
- Excel-VBA 快速上手(八、单元格对象-常见的单元格操作)
- 取消选中单选框radio的三种方式
- 计算机辅助制造卜昆内容,西北工业大学07年硕士生入学考试专业课大纲(428计算机辅助制造)...
- java 分析类_java--分析简单java类与反射的联系
- 案例分析——收尾工作
- 如何清除去掉PPT文字下的波浪线
- 工业机器人综合实训考核装置
热门文章
- leetcode-买卖股票的最佳时机④*
- Android Studio打包程序时出现transformClassesWithDexForRelease错误
- HBase Shell基本操作
- intellij 快捷键整理
- 命令行选项解析函数(C语言):getopt()和getopt_long()
- Github上的资源清单
- 多线程中Local Store Slot(本地存储槽)[转]
- 交叉熵代价函数cross-entropy
- Python学习笔记:虚拟环境和包
- Linux内存Mem和Swap那点事,Linux内存 mem 和 swap