我正在尝试从源代码构建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是一个非常活跃的开源项目,如果它甚至无法构建,也无法想象发布会达到Final。
我可能会遗漏一些东西(因为我之前从未使用过Ban Transitive Dependencies),但我无法理解当时和现在之间发生了什么变化。
首先,正如预期的那样,wildfly-feature-pack
确实取决于cxf-rt-features-clustering
。此外,我们可以注意到它的父级为wildfly-parent
。最后,在此项目中指定了“ban-transitive-deps”规则。这些事can all be seen in its POM。
cxf-rt-features-clustering
的版本为fixed in the parent POM,其值为${version.org.apache.cxf}
,defined in the same POM为“3.1.6”。
查看the POM for that artifact,它甚至不依赖于xalan:xalan
。但是,它确实取决于其他东西的全部负荷。这些不会导致“禁止传递依赖”规则失败吗?为什么Maven enforcer插件“认为”它依赖于xalan:xalan
?
此外,为什么执行器输出甚至表明xalan:xalan
依赖于另一个工件?当然,违反wildfly-feature-pack
取决于cxf-rt-features-clustering
和cxf-rt-features-clustering
取决于xalan
的规则就足够了?这不仅仅意味着wildfly-feature-pack
具有传递依赖性吗?
我想我可能误解了整个“禁止传递依赖”规则本身。 official documentation并不是非常有用,它只是说这条“规则禁止所有传递依赖”,这很明显。
答案 0 :(得分:0)
这意味着您使用不允许未明确定义依赖关系的规则配置了enforcer插件。 在这种情况下,您必须明确地将这一部分添加到POM中:
<!-- https://mvnrepository.com/artifact/xalan/xalan -->
<dependency>
<groupId>xalan</groupId>
<artifactId>xalan</artifactId>
<version>2.7.1.jbossorg-2</version>
</dependency>
UPD:根据我的研究,Maven版本就是这里的原因。必须高于3.3.1。