问题描述
今天在写一个小项目的时候,按照平常的步骤建立一个父模块用来管理所有子模块依赖的版本号,
父模块配置文件主要如下:
<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>
然后建立子模块,配置文件如下:
<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文件爆红:
问题排查
点击刷新,重启IDEA都没有用。上网查了查,再看看我自己的项目:
1、父模块dependencyManagement加了呀
3、父模块中依赖版本号定义在properties标签中,引用也没错啊
2、子模块也声明了父模块:
<parent>
<artifactId>JavaSE</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
然后我开始检查自己的maven配置,打开jar包存放的位置:
发现它果然创建了unknown文件夹。可是为什么子模块没有引用到父模块配置的版本号呢?
我再检查maven配置文件:settings.xml
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
配置好了阿里云镜像仓库,jar包存放的位置也没有问题。
那么,疑惑了。我甚至想删了这个maven,重新装一个试试。(当前是3.6.0版本的)
问题解决
我突然想起maven的生命周期里有一个clean,用来清理上一次构建过程中生成的文件等。
试着清理了一下父模块,清理成功,重新刷新maven:
等待maven进程执行完毕,发现问题解决了!子模块版本号全部变成了父模块统一定义的版本号。
总结
遇到maven子模块依赖继承不到父模块依赖定义的版本号的问题,解决步骤如下:
1、首先检查父项目中是否用:
<dependencyManagement>
</dependencyManagement>
这个标签包裹依赖。
2、看看父模块依赖版本号引用有没有写错
3、检查子模块是否声明了父模块:
<parent>
<artifactId>XXXX</artifactId>
<groupId>org.XXX</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
4、如果maven配置没有问题,试着清理一下项目,让maven重新构建,也许就成了。