Maven之dependencyManagement

1. 父项目的dependencyManagement

最开始,知道dependencyManagement是管理jar包版本的,如果在父项目中的该节点下声明了包的版本,子项目中在Dependencies中引用该包时就不需要声明版本了,这样保证多个子项目能够使用相同的包版本。
dependencyManagement不实际下载jar包,只会声明包的版本。如果Dependencies中声明了包的版本,则会覆盖dependencyManagement声明的版本。

2. 解决包冲突

但是,除了上面简单理解的dependencyManagement,其实它更强大的功能是解决包冲突,很多教程也这么说,但是我一直以为是第一种情况那样,不用再声明包版本了,达到所有子项目包版本相同的目的,实际上,一个项目中,同时使用dependencyManagement和Dependencies,基本上就告别了使用exclusions一个一个排除包来解决包冲突的方法,这种方式以前并没有注意到,或者很多教程没有特别强调,但是这个才是dependencyManagement的方便之处。
起因是我使用如下jar包:

<properties>
    <activitti.version>5.22.0</activitti.version>
    <spring.redis.version>1.6.2.RELEASE</spring.redis.version>
    <spring.vserion>4.1.5.RELEASE</spring.vserion>
</properties>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>${spring.redis.version}</version>
</dependency>
...
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring</artifactId>
    <version>${activitti.version}</version>
</dependency>

其中,spring-data-redis引入spring版本是4.1.9, 而activiti-spring引入的spring版本是4.1.5.
如下图所示:

两者引入的spring组件的版本各部相同,导致程序无法运行,此时第一反应是使用exclusions一个个排除冲突的jar包,操作十分麻烦,突然想到dependencyManagement,如果我把冲突的包放在其中,声明了版本,会怎么样,如下:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.vserion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.vserion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.vserion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.vserion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.vserion}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>${spring.redis.version}</version>
</dependency>
...
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring</artifactId>
    <version>${activitti.version}</version>
</dependency>

${spring.vserion}=4.1.5.RELEASE, 此时在dependencies之上,我添加了dependencyManagement,并且将所有冲突的jar包都声明了我想要的版本号,结果如下:

至此,可以告别exclusions了。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MavendependencyManagement是用来集中管理项目依赖版本的机制。通过在顶层的父pom.xml文件或子模块的pom.xml文件中定义dependencyManagement标签,可以统一管理项目中所有子模块的依赖版本。 在dependencyManagement标签中,可以声明依赖的groupId、artifactId和version,并指定依赖的类型和作用域。这样,在子模块的pom.xml文件中,只需要声明依赖的groupId和artifactId,不需要再指定版本号,Maven会自动从父pom.xml文件的dependencyManagement中找到对应的版本号进行依赖管理。 与之相比,直接在子模块的dependencies标签中声明依赖时,Maven会根据子模块的pom.xml文件中的声明来决定依赖的版本。而使用dependencyManagement可以集中管理所有子模块的依赖版本,避免了在每个子模块中重复声明依赖版本的问题。 综上所述,MavendependencyManagement机制可以帮助项目统一管理依赖版本,提高项目的可维护性和可复用性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Maven实战 | dependencies与dependencyManagement](https://blog.csdn.net/qq_31975963/article/details/82882463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值