如何使用父项目中隐式管理的传递依赖项?
问题描述:
有一个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
的Maven不知道是什么版本的subdep
必须使用:
...
<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
...
是否有子项目传递依赖使用方式在父项目中隐式管理?
答
由于dependencyManagement
只定义约束(如版本),而不是真正的dependencies
,为什么不把版本对齐放在共享父pom中?
更新依赖版本可能会让人觉得奇怪,但是如果您没有时间找到原因或实际解决问题,那么如何解决失败的构建问题。
的dep
所有者可以升级有关subdep
其版本的依赖,即使没有让你通过dep
版本增量知道。你构建得不可重现。
如果您的模块依赖于版本1的subdep
的API,那么您通常希望对版本2执行“受控迁移”。如果没有任何更改,也许没有理由在第一个版本中增加版本号地点。
为了减轻疼痛,我建议看看到Maven版本插件:
有关如何告诉Maven来“只使用最新的”的讨论,参见:
因为如果我决定切换到'dep'的版本2,这取决于'subdep'的更新版本,这样'subdep'的显式定义的版本将会覆盖'dep' v.2依赖树中'subdep'的版本。因此,每次更改“dep”版本时,都必须手动重新对齐显式定义。 – vect
@vect我已经更新了我的答案。 “ –
”dep的所有者可能会升级其对subdep的版本依赖关系,即使不通过dep的版本增量让您知道,您的构建也将无法重现。“ - 另一方面,在'dependencyManagement'中覆盖'subdep'的一个版本我可能会冒一个错误的版本,因为它不包含'dep'所需的'subdep'版本。而且由于构建时没有错误,只有在集成测试或运行时才会发现构建的不一致性。 – vect