添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

maven子模块依赖继承不到父模块依赖定义的版本号问题解决

问题描述

今天在写一个小项目的时候,按照平常的步骤建立一个父模块用来管理所有子模块依赖的版本号,

父模块配置文件主要如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<groupId>org.example</groupId>
<artifactId>JavaSE</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>Day01</module>
</modules>

<properties>
<lombok.version>1.18.12</lombok.version>
<junit.version>4.10</junit.version>
<hutool.version>5.7.5</hutool.version>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

然后建立子模块, 配置文件 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<parent>
<artifactId>JavaSE</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>Test</artifactId>

<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>

然后, 问题来了 ,子模块pom文件爆红:

image-20210726153404492

问题排查

点击刷新,重启IDEA都没有用。上网查了查,再看看我自己的项目:

1、父模块dependencyManagement加了呀
3、父模块中依赖版本号定义在properties标签中,引用也没错啊
2、子模块也声明了父模块:

然后我开始检查自己的maven配置,打开jar包存放的位置:

image-20210726153845819

发现它果然创建了unknown文件夹。可是为什么子模块没有引用到父模块配置的版本号呢?

我再检查maven配置文件:settings.xml

配置好了阿里云镜像仓库,jar包存放的位置也没有问题。

那么,疑惑了。我甚至想删了这个maven,重新装一个试试。(当前是3.6.0版本的)

问题解决
我突然想起maven的生命周期里有一个clean,用来清理上一次构建过程中生成的文件等。

试着清理了一下父模块,清理成功,重新刷新maven:

image-20210726160049514

等待maven进程执行完毕,发现问题解决了!子模块版本号全部变成了父模块统一定义的版本号。

总结

遇到maven子模块依赖继承不到父模块依赖定义的版本号的问题,解决步骤如下:

1、首先检查父项目中是否用:

1
2
3
<dependencyManagement>

</dependencyManagement>

这个标签包裹依赖。

2、看看父模块依赖版本号引用有没有写错

3、检查子模块是否声明了父模块:

1
2
3
4
5
<parent>
<artifactId>XXXX</artifactId>
<groupId>org.XXX</groupId>
<version>1.0-SNAPSHOT</version>
</parent>

4、如果maven配置没有问题,试着清理一下项目,让maven重新构建,也许就成了。