maven 爆红 子项目 依赖 版本不对 project2 引入 project1

maven 3.6.1 爆红 子项目 依赖 版本不对 project2 引入 project1 demo2 引入 demo1

maven 3.6.1 爆红 子项目 依赖 版本不对 project2 引入 project1 demo2 引入 demo1

错误场景

maven版本 3.6.1
项目结构 父项目:parent, parent有两个子项目project1,project2
project1引入fastjson1.2.83,project2引入project1,结果发现project2里的fastjsson是1.2.70。
你也可能会是:project1引入了某个依赖,project2引入project1,发现project2里还是爆红

原因

如果未定义,maven会优先使用parent的依赖,我的整个项目的parent是公司的框架定义的,里面的依赖是旧版本的,导致我的project2是用的公司定义的旧版而不是我在common里定义的新版

解决办法

在我的父项目里定义

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.83</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

dependencyManagement只是声明,而不是真正引入,
在project1里再引入依赖的时候

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>

不用定义版本了,maven会往上层找,在parent的dependencyManagement找到了我们刚刚定义的1.2.83,就会使用这个,project2引入project1之后同理,往上找,也会找到并使用这个。

举一反三

如果需要一个依赖在所有的字项目里都可用,那就直接在最顶层的父项目里引入这个依赖

小结

我觉得这应该是maven3.6.1的逻辑不太合理的地方,我认为既然project2引入了project1就应该优先使用project1里的依赖的版本,不知道这个逻辑后面的版本有没有改呢

p.s. 我本来是想把所有依赖都放在common里的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值