【问题标题】:"Ban transitive dependencies" causes build to fail even though it apparently worked before“禁止传递依赖”会导致构建失败,即使它以前显然有效
【发布时间】:2023-04-06 08:06:01
【问题描述】:

我正在尝试从源代码构建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”规则。这些东西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 执行器插件“认为”它确实依赖于 xalan:xalan

此外,为什么执行器输出甚至显示xalan:xalan 依赖于另一个工件?当然,违反wildfly-feature-pack 依赖于cxf-rt-features-clusteringcxf-rt-features-clustering 依赖于xalan 的规则就足够了吗?这不就意味着wildfly-feature-pack 有传递依赖吗?

我想我可能误解了整个“禁止传递依赖”规则本身。 official documentation 并不是很有帮助,它只是说这个“规则禁止所有传递依赖”,这很明显。

【问题讨论】:

  • 你对 pom 做了什么改动吗?上游每天构建几次,我还没有看到这个问题。
  • 嗨@JamesR.Perkins,不,我没有对 POM 进行任何更改。我注意到至少对于 JBoss EAP(基于 WildFly)已经观察到了这个问题 - 参见 issues.jboss.org/browse/JBEAP-5775 - 解决方法是完全禁用强制插件。这种“感觉”是错误的,因为不应该仅仅因为 QA 给你一个你不喜欢的结果就禁用质量保证。
  • 您使用的是什么 JDK 和该 JDK 的版本?
  • @JamesR.Perkins jdk1.8.0_162 在 RHEL 7.4 上,作为 YUM 包安装
  • 您是从源 zip 还是从 GitHub 的标签构建的?我看看能不能在本地重现。

标签: maven dependencies wildfly maven-enforcer-plugin


【解决方案1】:

这意味着您使用不允许未明确定义依赖项的规则配置了强制插件。 在这种情况下,您必须明确地将这些部分添加到 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。

【讨论】:

  • 这个错误是在wildfly-feature-pack上报的,不是cxf-rt-features-clustering上的,是第三方依赖。警告似乎是说xalancxf-rt-features-clustering 的依赖项,如果属实,这似乎违反了规则,但根据我的问题,情况似乎也并非如此。如果这是真的,那么您的解决方案将是正确的解决方案。但是,它仍然会问为什么它以前有效而不是现在有效。
  • 必须构建它以验证:您似乎在 3.3.1 之前的 maven 中构建它。对于 Maven 3.1.1 (Windows) 我有同样的失败。在 Maven 3.5.0 (Mac) 上运行良好: [INFO] --- maven-enforcer-plugin:3.0.0-M1:enforce (ban-bad-dependencies) @ wildfly-naming --- [INFO]跨度>
  • 检查您的输出中是否存在以下警告:[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireMavenVersion failed with message: To build this project Maven 3.3.1 (or更大)是必需的。请安装它。
  • 不,我已经知道我必须使用 Maven 3.3.1 或更高版本,我正在使用最新的 Maven 3.5.2 来构建它。您还可以从我的问题中的构建失败中看到,这是由于传递依赖关系而不是由于 Maven 版本。你能告诉我你运行的确切 Maven 命令吗?你确定你正在构建 10.1.0.Final,而不是快照版本?
  • 当然,我已经从上面的链接中克隆了 master。然后运行 ​​[mvn clean install] 和 [mvn --version]
猜你喜欢
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
相关资源
最近更新 更多