继承可选依赖项的版本

Inheriting the version of an optional dependency

我公司有3个Maven项目,组织如下:

项目 A 依赖于项目 B。

项目 B 依赖于项目 C。(项目 B 在其 POM 中将项目 C 设置为可选依赖项)

我是项目 A 的所有者。我想将项目 C 添加为我的 POM 中的直接依赖项。但是,我不想负责使 Project C 的版本保持最新。有没有什么办法可以一直继承项目B的POM中指定的项目C的版本?

如果你不控制项目 B,那是不可能的,除非可能使用一些插件 hackery。

如果你 控制项目 B 那么你可以在该项目中声明一个依赖管理部分,你可以另外 import into project A.

项目 B POM

<dependencyManagement>
    <groupId>com.foo</groupId>
    <artifactId>project-c</artifactId>
    <version>1.2.3</version>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>com.foo</groupId>
        <artifactId>project-c</artifactId>
        <!-- no need for version here, comes from dependencyManagement -->
        <optional>true</optional>
    </dependency>
</dependencies>

项目 POM

<properties>
    <!-- using a property isn't necessary, but ensures the
         POM import and dependency stay in sync -->
    <project.b.version>2.3.4</project.b.version>
</properties>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.foo</groupId>
            <artifactId>project-b</artifactId>
            <version>${project.b.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>com.foo</groupId>
        <artifactId>project-b</artifactId>
        <version>${project.b.version}</version>
    </dependency>
    <dependency>
        <groupId>com.foo</groupId>
        <artifactId>project-c</artifactId>
        <!-- version is not necessary, imported from project-b's dependency management -->
    </dependency>
</dependencies>

这意味着对于 B 的依赖管理部分中的 所有 依赖项,项目 A 将默认为项目 B。我认为没有办法将其限制为特定的。我怀疑你会关心,但只是需要注意一些事情。

项目 A 在其自己的依赖管理中或直接在 <dependencies> 中定义的任何版本都将覆盖从项目 B 的依赖管理中引入的任何版本。