gpt4 book ai didi

maven - 如何禁止版本包含特定部分的 Maven 依赖项?

转载 作者:行者123 更新时间:2023-12-05 05:27:22 25 4
gpt4 key购买 nike

我正在尝试使用 Maven Enforcer's banned dependencies我想禁止任何包含 -redhat- 的 Artifact 存在 compileruntime 依赖项。背景:JEE API 和其他东西已经存在于 JBoss AS 中,永远不应包含在 EAR 中。

这是我正在尝试的,但它不起作用:

      <execution>
<id>banned-dependencies</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<bannedDependencies>
<searchTransitive>false</searchTransitive>
<excludes>
<exclude>*:*:*-redhat-*:*:compile</exclude>
<exclude>*:*:*-redhat-*:*:runtime</exclude>
</excludes>
</bannedDependencies>
</rules>
<fail>true</fail>
</configuration>
</execution>

最佳答案

如您所见,这不会按照您想要的方式工作。 (我假设您发现 enforcer 插件匹配您的 pom 中列出的所有依赖项?)

问题是 Maven 期望给定的 version 是单个 * 或符合 Maven 的 Version Spec . (即 1.0[1.0,) 等)它无法处理您正在使用的多个通配符。

很遗憾,我真的没有适合您的解决方案。你可能会 Write Your Own Rule并扩展 BannedDependencies 规则并使其按照您希望的方式工作。

接下来深入研究导致您的问题的代码

BannedDependencies 类中,对 exclude 字符串中给出的版本进行以下检查:

if (pattern[2].equals("*") || artifact.getVersion().equals(pattern[2]) ) {
result = true;
} else {
try {
result = AbstractVersionEnforcer.containsVersion(
VersionRange.createFromVersionSpec(pattern[2]),
new DefaultArtifactVersion(artifact.getBaseVersion()));
} catch ( InvalidVersionSpecificationException e ) {
throw new EnforcerRuleException("Invalid Version Range: ", e);
}
}

你的具体问题是

AbstractVersionEnforcer.containsVersion(
VersionRange.createFromVersionSpec(pattern[2]),
new DefaultArtifactVersion(artifact.getBaseVersion()))

您可以看到,由于 VersionRange.createFromVersionSpec(),它需要一个 VersionRange。可以在这里看到代码: VersionRange source code

关于maven - 如何禁止版本包含特定部分的 Maven 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19704889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com