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

问题描述

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

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

<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文件爆红:

image-20210726153404492

问题排查

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

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

<parent>
    <artifactId>JavaSE</artifactId>
    <groupId>org.example</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

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

image-20210726153845819

    发现它果然创建了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:

image-20210726160049514

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

总结

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

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

<dependencyManagement>
	
</dependencyManagement>

这个标签包裹依赖。

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

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

<parent>
    <artifactId>XXXX</artifactId>
    <groupId>org.XXX</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐