我如何使用(参考)传递依赖的版本?

时间:2016-07-26 12:35:36

标签: maven transitive-dependency

我正面临一种情况,我需要指定一个传递依赖的版本。

使用以下依赖关系树

A <- B <- C

我需要在C的pom.xml中指定A的版本

有没有办法做到这一点?这样我可以过滤一些像这样的文件吗?

A's version is @{...a.version}

3 个答案:

答案 0 :(得分:2)

如果要指定(可能的)传递依赖项的版本,请将依赖项放入POM的dependencyManagement部分。然后,如果依赖性发生传递,则使用它(如果没有找到这样的传递依赖,则静默忽略)。

答案 1 :(得分:1)

使用<optional>true</optional>

C - &gt; B - &gt;甲

pom(B):

<dependencies>
    <dependency>
      <groupId></groupId>
      <artifactId>A</artifactId>
      <version></version>
      <optional>true</optional>
    </dependency>
    ...
</dependencies>

POM(C):

<dependencies>
    <dependency>
      <groupId></groupId>
      <artifactId>B</artifactId>
      <version></version> 
    </dependency>
    <dependency>
      <groupId></groupId>
      <artifactId>A</artifactId>
      <version></version> 
    </dependency>
    ...
</dependencies>

答案 2 :(得分:1)

无法直接引用某些任意依赖的版本(瞬态或非暂时)。

但是,在您的父pom中,您可以定义一个属性:

<properties>
    ...
    <yourCdep.version>
    ...
</properties>

并将依赖项添加到dependencyManagement部分:

<dependencyManagement>
    <dependencies>
        ...
        <dependency>
            <groupId>yourCdep.group</groupId>
            <artifactId>yourCdep</artifactId>
            <version>${yourCdep.version}</version>
        </dependency>
        ...
    </dependencies>
</dependencyManagement>

从模块B中的依赖项中删除版本,因为它现在是#34;托管&#34;。

父pom中的属性值可以在模块A和B中访问。

特别是,现在可以在资源过滤时应用此属性值。