我正在尝试使用Maven Enforcer's banned dependencies我要禁止对包含compile
的任何工件存在runtime
和-redhat-
依赖关系。背景知识: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>
答案 0 :(得分:0)
正如你所发现的那样,你不会按照你想要的方式工作。 (我假设你发现强制执行器插件匹配你的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
引起的VersionRange.createFromVersionSpec()
期待。这里的代码可以在这里看到:
VersionRange source code