【问题标题】:Dependency management not working with multi level inheritance依赖管理不适用于多级继承
【发布时间】:2021-08-04 09:09:53
【问题描述】:

假设我有一个名为 parent(类型 pom)的项目,它继承了 spring-boot-starter-parent

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.4</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<groupId>com.demo</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
    </dependencies>
</dependencyManagement>
    

你可以看到我在 dependencyManagement

有一个依赖项

接下来,我创建了继承 parent 的项目 mid

<parent>
    <groupId>com.demo</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0</version>
</parent>

<artifactId>mid</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>emms-backend</name>
<packaging>pom</packaging>

<modules>
    <module>child</module>
</modules>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
    </dependencies>
</dependencyManagement>

最后,我创建了继承mid的项目child

<parent>
    <groupId>com.demo</groupId>
    <artifactId>mid</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<artifactId>child</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
</dependencies>

但是当我使用 mvn install 构建子时,我得到一个错误,没有找到 spring-boot-startter-webflux 的版本。如果我将行 &lt;version&gt;2.4.4&lt;/version&gt; 放在 parent 项目的依赖项中,它也不起作用。如果我将行 &lt;version&gt;2.4.4&lt;/version&gt; 放在 mid 项目的依赖项中,它就可以工作。但我希望我不需要将版本放在任何地方。是不是我哪里搞错了?

【问题讨论】:

  • 您需要在父项目中使用mvn install(在您的情况下为mid),以便将更改应用于子项目。
  • 不是这里的问题,兄弟

标签: java spring maven


【解决方案1】:

dependency management 上的 Maven 文档有以下警告(重点是我的):

当引用 POM 具有传递依赖项的工件时,项目需要将这些工件的版本指定为托管依赖项。 不这样做会导致构建失败,因为工件可能没有指定版本。 (在任何情况下,这都应该被视为最佳实践,因为它可以防止工件版本从一个构建更改为下一个构建)。

看起来你正在达到这个确切的行为。

【讨论】:

    猜你喜欢
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 2015-06-23
    • 2013-04-01
    相关资源
    最近更新 更多