2

当使用 maven enforcer plugin运行依赖收敛时,我们可以很容易地检测到某个项目可传递地依赖于同一工件的 2 个不同版本。

但是考虑为同一系统编写插件的一大群人。并考虑该组中的 2 个团队。

一个团队正在开发插件 A 并具有以下依赖链:A -> B -> C (v 1.1)

另一个团队开发插件 X 并具有以下依赖链:X -> Y -> C (v 2.0)

项目 A 和 X 是完全独立的,但在生产中,两个插件都已部署并且存在冲突。尽管两个团队共享 CI,但强制插件不会检测到这种冲突,因为只有当它们共享一个共同的祖先时才会检测到冲突。

(例如,如果 A 也有:A -> D -> C (v 1.4),这将被检测到)。

似乎解决方案是定义第三个“超级模块”,它将聚合 A 和 X 并将其提供给执行器插件。我遇到了这个问题:

我定义了这样一个模块。添加了 A 和 X 作为依赖项('pom' 类型),但是当我执行执行器时,它没有检测到冲突!就好像超级 pom 无法“吸收”传递依赖。

我在这里想念什么?

我正在使用 Maven 3.0.4。


更具体的说明:

此链接包含 2 个独立项目。一个依赖于org.opensaml:opensaml:2.2.0,另一个依赖于org.apache.solr:solr-core:4.10.0。麻烦的是前者依赖于commons-lang:commons-lang:2.1而后者依赖于commons-lang:commons-lang:2.6

因此,这两个 jar 都出现在最终应用程序的类路径中,这有可能破坏任何一个依赖项。

我尝试创建另一个聚合两个 'roots' 的项目,但强制插件没有检测到冲突。

这是我正在使用的命令行:mvn enforcer:enforce validate

4

0 回答 0