• Maven dependencies 与 dependencyManagement 区别


    问题如下:

     描述:项目使用的依赖都是父工程的依赖,父工程依赖的spring boot 版本是  2.3.2 . 现在在父工程中引入 2.2.9 的websocket 依赖,发现一直报警告冲突

    解决办法:

    取消掉websocket 显示的版本号依赖,增加MavenDependency 显示的依赖2.2.9版本

      <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-websocket</artifactId>
                    <version>2.2.9.RELEASE</version>
                </dependency>
            </dependencies>
        </dependencyManagement>

    分析

    虽然问题解决了,依赖包不再报冲突警告,但是究其原因还是不了解。现在分析研究DependencyManagement 为何能够解决这个冲突

    在单一的模块中,使用Dependencies 直接依赖,若有一个大工程项目里面包含多个子模块,则为了所有模块包的统一和好管理,则需要用到dependencyManagement 

    由于模块很多,所以我们又抽象出一个 parent  来管理子项目的公共依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致。

    在顶层的POM 中会用到DependencyManagement ,通过其管理依赖jar 的版本,让子项目中引入一个依赖而不用显示的列出的版本号。Maven 会沿着父层向上走,直到找到dependencyManagement 元素,

    然后它会使用在这个DependencyManagement 元素指定的版本号。

    如果子类中某个项目想使用特殊的版本号,则直接使用 dependencies 声明即可,不再使用父类的依赖

    区别 dependencies dependencyManagement

    dependencies 即使在子类项目中不写依赖项,那么字类项目也会从父类项目中继承该依赖项

    dependencyManagement 里只是声明依赖项,并不会实现引入,只有在字类项中写了该依赖,并且没有指定版本号,才会从父类中继承 version ,scope .如果字类项使用了指定的版本号,则会使用项目中指定的 jar 版本。

  • 相关阅读:
    Linux下启动时间优化专题
    如何展开Linux Memory Management学习?
    《Systems Performance》阅读笔记及收获
    Linux时间子系统之四:Timer在用户和内核空间流程
    Win7 下安装ubuntu14.04双系统
    ubuntu 上使用valgrind
    Observer模式
    从C++到java
    gcc 0长数组学习
    Linux中10个有用的命令行补齐命令
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/13710600.html
Copyright © 2020-2023  润新知