CLOVER🍀

That was when it all began.

Apache Mavenで、依存関係からワイルドカードでexcludeする

前のエントリーで、依存関係からアーティファクトの一部をartifactIdに*を指定することでまるごとexcludeしていました。

        <dependency>
            <groupId>org.infinispan</groupId>
            <artifactId>infinispan-server-testdriver-core</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.infinispan</groupId>
                    <artifactId>infinispan-server-runtime</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.jboss.shrinkwrap.resolver</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

同じgroupIdに属するアーティファクトを一括でまとめてexcludeできないかな、と思って雰囲気で書いてみたのですが、動きました。

前にも書いたことがある気がするのですが、記憶がハッキリしていないのと、情報も見つけたのでメモしておくことにしました。

Apache Maven 3.2.1から指定できるようになったみたいで、リリースノートには「Transitive dependency excludes」と書かれています。
この呼び方で正しいのかな?という気はしますが…。

Release Notes - Maven 3.2.1 / Transitive dependency excludes

[MNG-2315] Add option to exclude all transitive dependencies for a particular one - ASF JIRA

*はワイルドカードとして使え、artifactIdだけでなくgroupIdにも指定できるようです。

  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-embedder</artifactId>
      <version>3.1.0</version>
      <exclusions>
        <exclusion>
          <groupId>*</groupId>
          <artifactId>*</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    ...
  </dependencies>

Apache Maven 3.2.1のリリースは2014年2月21日なので、かなり前から使えるようになっていたみたいです。

Maven – Maven Releases History

ドキュメントには載っていない気はしますが…。

Maven – Optional Dependencies and Dependency Exclusions

exclude自体そんなに多く使わないことと、このように一括で指定する機会はさらに少ないのですが、せっかくなので書き残しておきましょう。