运行dependency convergence with the 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),则会检测到这种情况。)
似乎解决方案是定义第3个“超级模块”,它将聚合A和X并将其提供给enforcer插件。我遇到了麻烦:
我定义了这样一个模块。添加了A和X作为依赖项(类型为'pom'),但是当我执行强制执行器时,它不会检测到冲突!就好像超级pom无法“吸收”传递依赖关系。
我在这里缺少什么?
我正在使用maven 3.0.4。
更具体的说明:
This link包含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都出现在最终应用程序的类路径中,这有可能破坏任何一个依赖项。
I tried creating another project that aggregates both 'roots',但是执法者插件没有检测到碰撞。
这是我使用的命令行: mvn enforcer:enforce validate