1. ホーム
  2. maven

[解決済み] Mavenの依存関係をグローバルに除外する方法はありますか?

2022-10-29 20:18:58

質問

私は、それに依存するすべての依存関係からそれを除外することなく、包含されることから推移的な依存関係を除外する「一般的な」方法を見つけようとしています。 たとえば、私がslf4jを除外したい場合、私は次のようにします。

  <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-jmx</artifactId>
    <version>3.3.2.GA</version>
    <exclusions>
      <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
  <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>3.4.0.GA</version>
    <type>jar</type>
    <exclusions>
      <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
      </exclusion>
    </exclusions>
  </dependency>

これは pom ファイルをきれいにするためでもあり、将来的に除外された依存関係に依存する依存関係を追加する人がいて、それを除外するのを忘れてしまうという問題を避けるためでもあります。

方法はあるのでしょうか?

どのように解決するのですか?

これは役に立ちますか? http://jlorenzen.blogspot.com/2009/06/maven-global-excludes.html

avalon-framework を WAR から除外したいと仮定すると、projects POM に provided というスコープで以下を追加します。これは、すべての推移的依存関係にわたって機能し、一度だけ指定することを可能にします。

<dependencies>
  <dependency>
      <artifactId>avalon-framework</artifactId>
      <groupId>avalon-framework</groupId>
      <version>4.1.3</version>
      <scope>provided</scope>
  </dependency>
</dependencies>

これは、親POMで指定した場合にも機能するので、プロジェクトがすべての子POMでこれを宣言する必要がなくなるでしょう。