一、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区别相关推荐

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

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

  2. dependencyManagement和dependencies的区别

    dependencyManagement和dependencies的区别 参考:http://zhaoshijie.iteye.com/blog/2094478 http://blog.csdn.ne ...

  3. maven中DependencyManagement和Dependencies

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

  4. dependencies和dependency以及dependencyManagement三者的区别?

    首先,这三个maven的pom文件标签都是用来进行包管理的 势力范围由dependencyManagement>dependencies>dependency依次减弱,并且每个标签都是上一 ...

  5. dependencyManagement与dependencies的区别

    dependencyManagement:用于父类管理,一般顶层的父类pom才有 能让所有在子项目中引用一个依赖而不用显式的列出版本号 dependencyManagement里只是声明依赖,并不实现 ...

  6. cmenu 隐藏子项中的一个子项_区分Maven中dependencyManagement与dependencies的作用

    导读:使用maven是为了更好的帮项目管理包依赖,maven的核心就是pom.xml.而maven中有许多的标签,下面我们主要讨论parent.dependencies与dependencyManag ...

  7. Maven dependencymanagement vs dependencies

    dependencyManagement集中管理依赖版本,dependencies节点声明依赖,并从父项目中继承版本号. dependencyManagement允许在不添加所有子继承的依赖项的情况下 ...

  8. devDependencies与dependencies区别

    devDependencies : 命令:npm i xxx --save -dev 同 npm i xxx -D 开发依赖,开发的时候需要运行的辅助的依赖,比如webpack打包工具,babel编译 ...

  9. maven---parent和dependencyManagement标签

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

最新文章

  1. AI伪装目标检测:让变色龙现出原形!
  2. C++确定一个字符串是否是另一个字符串的排列的算法(附完整源码)
  3. 机器学习实战-第12章Fpgrowth代码勘误+递归打印效果分析
  4. how is odata metadata request served 故意把configuration file里的GM6改成GM61之后
  5. java bouncycastle_java – 使用bouncycastle进行签名和验证签名的正确方法
  6. Keil | 解决Keil双击工程名无法打开.map的问题
  7. Kotlin入门(8)空值的判断与处理
  8. Java 苹果支付applepay服务端验证
  9. HTML和JavaScript学习笔记
  10. 前端实现图片验证码效果(数字和字母)
  11. 以Windows系统搭建基于Ethereum(以太坊)的区块链开发环境(具体操作与截图)
  12. Web开发者的福利 30段超实用CSS代码
  13. 解决Grails2.0-M1下 Intellij IDEA 中Controller等无法自动重新加载的BUG
  14. Excel-VBA 快速上手(八、单元格对象-常见的单元格操作)
  15. 取消选中单选框radio的三种方式
  16. 计算机辅助制造卜昆内容,西北工业大学07年硕士生入学考试专业课大纲(428计算机辅助制造)...
  17. java 分析类_java--分析简单java类与反射的联系
  18. 案例分析——收尾工作
  19. 如何清除去掉PPT文字下的波浪线
  20. 工业机器人综合实训考核装置

热门文章

  1. leetcode-买卖股票的最佳时机④*
  2. Android Studio打包程序时出现transformClassesWithDexForRelease错误
  3. HBase Shell基本操作
  4. intellij 快捷键整理
  5. 命令行选项解析函数(C语言):getopt()和getopt_long()
  6. Github上的资源清单
  7. 多线程中Local Store Slot(本地存储槽)[转]
  8. 交叉熵代价函数cross-entropy
  9. Python学习笔记:虚拟环境和包
  10. Linux内存Mem和Swap那点事,Linux内存 mem 和 swap