• maven中dependencyManagement与dependencies的区别与联系


    背景

    新的需求中需要使用到easyexcel中的动态生成列的功能,但是因为我们项目一开始使用的是1.2.4-beta的低版本,并不支持此项特性,所以我们需要将easyexcel的版本升级到高版本,让手下去拉个将项目中的easyexcel的版本升级至2.2.6。

    目前的这个项目中对应有10个子项目,一开始小伙改的时候,只是把对应的impl的版本给改了,这样就会导致项目在打包运行其他子项目时会出现classNotFound的错误,因为这些类还是向上找的老版本的easyexcel,所以打包报错。

    小伙不了解maven中的dependencyManagement标签特性,就傻乎乎的将每个子项目中的dependencies中关于easyexcel的那一项显式地声明为高版本,这样的话非常的笨拙,而且不利于管理。

    利用dependencyManagement标签特性我们只需要在父项目中声明dependencyManagement并制定easyexcel的版本号即可,子项目不需要再次声明了。

    接下来重点记一下这两个标签的区别。

    区别

    1. dependencyManagement标签:只是声明项目对jar包的依赖关系并对所依赖jar包进行版本管理,并不实现引入。而dependencies标签则是将所依赖的jar直接加到项目中。

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

    在pom.xml文件中对jar的版本的判断途径:

    1)如果dependencies里的dependency自己没有声明version元素,那么maven就会到dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version。

    2)如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。

    1. <!-- 会实际下载jar包,子项目会继承这些依赖 -->
    2. <dependencies>
    3. <dependency>
    4. <groupId>com.alibaba</groupId>
    5. <artifactId>easyexcel</artifactId>
    6. </dependency>
    7. </dependencies>
    8. <!-- //只是对版本进行管理,不会实际引入jar,子项目继承时必须显示声明 -->
    9. <dependencyManagement>
    10. <dependencies>
    11. <dependency>
    12. <groupId>com.alibaba</groupId>
    13. <artifactId>easyexcel</artifactId>
    14. <version>2.2.6</version>
    15. </dependency>
    16. </dependencies>
    17. </dependencyManagement>

    本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

    首发链接:https://www.cnblogs.com/lingyejun/p/16862611.html

  • 相关阅读:
    JavaScript栈的实现与解题
    css自定义属性/css变量
    axios 用formData的方式请求数据
    [Linux]文件描述符(万字详解)
    vite快速构建vue3项目
    腾讯云服务器后台重装后需要配置的一些东西
    IDA 反汇编 explorer
    为什么要替换 Object.defineProperty?
    安装wps后,回收站右键菜单出现“恢复误删文件”,通过注册表的方式去掉。
    mysql之order by工作原理
  • 原文地址:https://blog.csdn.net/lingyejun/article/details/127717640