zoukankan      html  css  js  c++  java
  • 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 版本。

  • 相关阅读:
    java web乱码及解决方法
    同时启动多个tomcat,端口修改
    oracle RAC LOG_ARCHIVE_DEST_1 与 LOG_ARCHIVE_DEST 冲突解决
    Oracle RAC 集群启动与停止
    Oracle 存储过程批量插入数据
    本地NTP服务器与客户端配置
    oracle 正确删除归档日志,并清除 V$ARCHIVED_LOG 数据
    oracle 断电启动失败:ORA-00600: internal error code, arguments
    maven 打包并导出 lib 第三方jar
    利用MAVEN打包可运行jar包,包括依赖的第三方包
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/13710600.html
Copyright © 2011-2022 走看看