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里的