我正在尝试从源代码构建WildFly 10.1.0.Final。
构建导致违反“禁止传递依赖”规则:
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.BanTransitiveDependencies failed with message:
org.wildfly:wildfly-feature-pack:pom:10.1.0.Final
org.apache.cxf:cxf-rt-features-clustering:jar:3.1.6:compile has transitive dependencies:
xalan:xalan:jar:2.7.1.jbossorg-2:compile
xalan:serializer:jar:2.7.1.jbossorg-2:compile
这会导致构建失败:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18:46 min
[INFO] Finished at: 2018-02-21T22:22:47Z
[INFO] Final Memory: 213M/512M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce (ban-transitive-deps) on project wildfly-feature-pack: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1]
我确信它一定在某个时候起作用了——WildFly 是一个非常活跃的开源项目,无法想象如果它甚至无法构建一个版本会达到最终版本。
我可能遗漏了一些东西(因为我以前从未使用过 Ban Transitive Dependencies),但我无法理解从那时到现在发生了什么变化。
首先,正如预期的那样,wildfly-feature-pack
确实取决于cxf-rt-features-clustering
. 此外,我们可以注意到它有一个wildfly-parent
. 最后,在这个项目本身中指定了“ban-transitive-deps”规则。这些东西都可以在它的 POM 中看到。
的版本在父 POM 中固定为cxf-rt-features-clustering
在与“3.1.6”相同的 POM中定义的值。${version.org.apache.cxf}
查看该工件的 POM,它甚至不依赖于xalan:xalan
. 但是,它确实取决于大量其他事情。这些不会导致“禁止传递依赖”规则失败吗?为什么 Maven 执行器插件“认为”它确实依赖xalan:xalan
?
此外,为什么执行器输出甚至显示xalan:xalan
依赖于另一个工件?当然,违反wildfly-feature-pack
依赖cxf-rt-features-clustering
和cxf-rt-features-clustering
依赖的规则就足够了xalan
?这不就意味着它wildfly-feature-pack
具有传递依赖吗?
我想我可能误解了整个“禁止传递依赖”规则本身。官方文档并不是很有帮助,它只是说这个“规则禁止所有传递依赖”,这很明显。