如何使用父项目中隐式管理的传递依赖?

时间:2017-04-12 15:30:44

标签: maven maven-3

我的项目的模块(dep)之一有一个module1库。依赖关系在父dependencyManagement部分中声明。

...
<groupId>group1</groupId>
<artifactId>parent-proj</artifactId>
...
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>group2</groupId>
            <artifactId>dep</artifactId>
            <version>1</version>
        </dependency>
    </dependencies>
</dependencyManagement>
...


...
<parent>
    <groupId>group1</groupId>
    <artifactId>parent-proj</artifactId>
    ...
</parent>
<artifactId>module1</artifactId>
...
<dependencies>
        <dependency>
            <groupId>group2</groupId>
            <artifactId>dep</artifactId>
        </dependency>
</dependencies>
...

dep反过来依赖subdep,我希望将module2用作继承自同一parent-proj的另一个模块(module2)中的依赖项。关键是要使subdep使用相同版本的dep subdep取决于没有在我的项目中明确声明版本。但是,当我尝试将module2的依赖项添加到subdep时,Maven没有意识到必须使用哪个版本的... <parent> <groupId>group1</groupId> <artifactId>parent-proj</artifactId> ... </parent> <artifactId>module2</artifactId> ... <dependencies> <dependency> <groupId>group2</groupId> <artifactId>subdep</artifactId> </dependency> </dependencies> ...

module2$ mvn dependency:tree
...
[ERROR]     'dependencies.dependency.version' for group2:subdep:jar is missing
...
WITH   cte 
AS     (
    select Me, MyParent, Attribute, 'valueToCarry' value_to_Carry
    from MyTable
    where 
    Attribute in
        (
        847
        ,1011
        ,1019
        )
    UNION ALL
    SELECT Link.Me, Link.Parent, Link.Attribute, cte.value_to_carry
    FROM   cte
        JOIN LINK ON cte.Me = S.Parent          
)

有没有办法在子项目中使用在父项目中隐式管理的传递依赖?

1 个答案:

答案 0 :(得分:1)

由于dependencyManagement仅定义约束(如版本),而不是真正的dependencies,为什么不将版本对齐放在共享父pom中?

更新依赖版本可能会有些奇怪,但是当你既没有时间找到原因也没有实际修复它时,如何实现失败的构建。

dep的所有者可以升级其与subdep的版本相关性,即使您没有通过版本增量dep通知您。你的构建变得不可复制。

如果您的模块依赖于subdep版本1的API,那么您通常希望进行受控迁移&#39;如果没有任何改变,也许没有理由在第一时间增加版本号。

为了减轻痛苦,我建议您查看Maven版本插件:

关于如何告诉Maven&#34;只是使用最新的&#34;见: