Maven项目缺少Maven Dependencies(dependencyManagement与dependencies)

问题

写完maven工程的pom文件,我的pom文件下的的依赖一直报错,然后下图中的左边依赖的地方一直报红,不断的更新maven工程始终无法下载到对应的依赖,右边的方框内缺少Maven Dependencies
在这里插入图片描述

问题解决思路

其实这个问题呢,自己一直饶了弯路,下载不到的时候我的第一想法就是我配置的问题,然后不断的去修改setting配置文件,但一直都没有解决问题。最终检查自己的pom文件的时候发现dependencies标签在dependencyManagement标签之下,因为我之前用的都是dependencies标签,然后下载依赖都是正常的,现在我将它放到了dependencyManagement标签之下出现了这个问题,然后我注释掉这个问题后重新更新工程,下载到了对应的依赖

问题解决后续

有兴趣可以参考查看:Maven官方文档这两个标签的地址
那么为什么呢?为什么dependencies标签单独使用的时候就可以下载到依赖,而在dependencyManagement标签之下就不可以呢?

dependencyManagement标签

官方文档(众所周知官方文档说的一直都不是人话,此处心累😁):
在这里插入图片描述
通俗解释:

Section for management of default dependency information for use in a group of POMs.

dependencyManagement就是用来管理声明一个pom文件的dependencies的一个标签
即只是声明依赖,并不实现依赖的实际引入

The dependencies specified here are not used until they are referenced
in a POM within the group. This allows the specification of a
“standard” version for a particular dependency

是指因为我们的在项目中,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。所以我们可以通过dependencyManagement标签来进行jar包版本的管理,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

dependencies标签

官方文档:
在这里插入图片描述
通俗解释:

The cornerstone of the POM is its dependency list. Most projects depend on others to build and run correctly. If all Maven does for you is manage this list, you have gained a lot. Maven downloads and links the dependencies on compilation, as well as on other goals that require them. As an added bonus, Maven brings in the dependencies of those dependencies (transitive dependencies), allowing your list to focus solely on the dependencies your project requires.

我整理理解成以下几点
1、dependencies包含dependency列表,
好处就是我们只需要管理这个列表即可管理我们的依赖,而不是去管一个一个的jar包,就会方便很多。
2、Maven下载并链接了对编译以及依赖它们的其他目标的依赖,这点就是说这个dependency项就标注了依赖的坐标,maven就可以自己去下载编译啥的。即所有在dependencies里的依赖都会自动引入
3、Maven引入了那些依赖项(传递性依赖项)的依赖项,使您的列表可以仅专注于项目所需的依赖项。就是说依赖具有传递性,即依赖被所有的子项目继承

二者区别

1、dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
2、dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值