2016-07-26 21 views
2

我面临的情况是我需要指定传递依赖的版本之一。我如何使用(参考)传递性依赖的版本?

有了下面的依赖关系树,

A <- B <- C 

我需要用C的pom.xml

指定的版本有没有办法做到这一点?所以我可以过滤这样的文件?

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

模块A和B是否是您的代码? –

+0

@SteveC是的,实际上。 –

+0

这些模块是否共享一个父pom.xml? –

回答

1

使用<optional>true</optional>

Ç - >乙 - >甲

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

如果你想指定一个(可能的)transiti的版本将依赖关系放入POM的dependencyManagement部分。然后,如果依赖发生传递(如果没有发现这种传递依赖,则默默忽略)。

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作为依赖删除版本它现在被“管理”了。

在父POM中的属性值将是在两个模块甲访问和B.

特别地,该属性值现在可以被施加时资源滤波。