3

私はMaven Enforcerの禁止された依存関係を使用しようとしcompileruntimeいます-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>
4

1 に答える 1

2

あなたが発見したように、これはあなたが望むようには機能しません。(enforcer プラグインが pom にリストされているすべての依存関係と一致していることに気付いていると思いますか?)

version問題は、指定された が単一であるか、maven のVersion Spec*に準拠していることを Maven が期待していることです。(つまり、など) 使用している複数のワイルドカードを処理できません。1.0[1.0,)

残念ながら、私は本当にあなたのための解決策を持っていません. 独自のルールを作成してルールを拡張し、希望どおりに機能させることができます 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 ソースコード

于 2013-10-31T14:41:29.590 に答える