来自 Maven BOM 的传递依赖?

Transitive dependency from maven BOM?

我正在开发一个扩展 rdf4j 框架的实用程序库,使用它的 BOM 模块导入它,例如:

<groupId>com.example</groupId>
<artifactId>rdf4j-utils</artifactId>
<version>1.0</version>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.eclipse.rdf4j</groupId>
            <artifactId>rdf4j-bom</artifactId>
            <version>3.0.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>

    <!-- core rdf4j dependencies here -->

</dependencies>

是否可以使 rdf4j-utils 指定的 rdf4j 版本可用于导入模块,以便可以在不指定目标版本的情况下从 BOM 导入其他 rdf4j 模块?例如:

<dependencies>

    <dependency>
        <groupId>com.example</groupId>
        <artifactId>rdf4j-utils</artifactId>
        <version>1.0</version>
    </dependency>

    <dependency>
        <groupId>org.eclipse.rdf4j</groupId>
        <artifactId>rdf4j-repository-sparql</artifactId>
        <!-- !!! implicit rdf4j version as specified by rdf4j-utils -->
    </dependency>

</dependencies>

不,但是您可以在 <properties> 中定义一个名称类似于 <rdf4j.version> 的 属性 并在不同的依赖项中使用它。

您想要的正是通过创建物料清单来解决的。因此,您可以创建自己的 BOM,导入 rdf4j。然后您可以将两个依赖项放在 dependencyManagement 部分并将版本定义为单个 属性 以创建最小的维护设置。

<properties>
  <rdf4j-utils-version>1.0</rdf4j-utils-version>
</properties>

<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.eclipse.rdf4j</groupId>
        <artifactId>rdf4j-bom</artifactId>
        <version>3.0.1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>com.example</groupId>
        <artifactId>rdf4j-utils</artifactId>
        <version>${rdf4j-utils-version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.rdf4j</groupId>
        <artifactId>rdf4j-repository-sparql</artifactId>
        <version>${rdf4j-utils-version}</version>
      </dependency>
    </dependencies>
<dependencyManagement>

对于更完整的 BOM 示例,我发现 spring-cloud-dependencies 是一个很好的灵感来源 - 因为它很好并且功能完整,是一个带有父 pom 的 BOM 并导入许多其他 BOM。