继承可选依赖项的版本
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 的依赖管理中引入的任何版本。
我公司有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 的依赖管理中引入的任何版本。