親 POM から継承された成果物を除外する方法はありますか? 質問する

親 POM から継承された成果物を除外する方法はありますか? 質問する

<exclusions>依存関係からの成果物は、 内の要素を宣言することで除外できます<dependency>が、この場合は親プロジェクトから継承された成果物を除外する必要があります。議論中の POM の抜粋は次のとおりです。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>jruby</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <parent>
      <artifactId>base</artifactId>
      <groupId>es.uniovi.innova</groupId>
      <version>1.0.0</version>
  </parent>

  <dependencies>      
      <dependency>
          <groupId>com.liferay.portal</groupId>
          <artifactId>ALL-DEPS</artifactId>
          <version>1.0</version>
          <scope>provided</scope>
          <type>pom</type>
      </dependency>
  </dependencies>
</project>

baseアーティファクトは に依存しjavax.mail:mail-1.4.jarALL-DEPS同じライブラリの別のバージョンに依存しています。 の はmail.jar実行ALL-DEPS環境に存在するため、エクスポートされていないものの、mail.jarとしてスコープ指定されている親に存在すると衝突しますcompile

解決策としては、親POMからmail.jarを削除することが考えられますが、ベースを継承するほとんどのプロジェクトではそれが必要です(log4jの推移的依存関係も同様です)。そこで、私がやりたいのは、単純に親のライブラリを子プロジェクトから除外するbase依存関係であり、親 pom ではない場合に実行できます。

...
    <dependency>
        <artifactId>base</artifactId>
        <groupId>es.uniovi.innova</groupId>
        <version>1.0.0</version>
        <type>pom<type>
        <exclusions>
          <exclusion>
             <groupId>javax.mail</groupId>
             <artifactId>mail</artifactId>
          </exclusion>
        </exclusions>
    </dependency>
...

ベストアンサー1

いくつかのアイデア:

  1. その場合、親から継承しないだけで済むかもしれません (そして、base除外を伴う依存関係を宣言します)。親 pom に多くのものがある場合は便利ではありません。

  2. テストするもう 1 つのことは、親 pomの下mailで必要なバージョンを使用してアーティファクトを宣言し、収束を強制することです (ただし、これによってスコープの問題が解決するかどうかはわかりません)。ALL-DEPSdependencyManagement

<dependencyManagement>
  <dependencies>
    <dependency>    
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
      <version>???</version><!-- put the "right" version here -->
    </dependency>
  </dependencies>
</dependencyManagement>
  1. または、log4j に依存する機能を使用していない場合は、log4j からの依存関係を除外することもできますmail(これが私のやり方です)。
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.15</version>
  <scope>provided</scope>
  <exclusions>
    <exclusion>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
    </exclusion>
    <exclusion>
      <groupId>javax.jms</groupId>
      <artifactId>jms</artifactId>
    </exclusion>
    <exclusion>
      <groupId>com.sun.jdmk</groupId>
      <artifactId>jmxtools</artifactId>
    </exclusion>
    <exclusion>
      <groupId>com.sun.jmx</groupId>
      <artifactId>jmxri</artifactId>
    </exclusion>
  </exclusions>
</dependency>
  1. あるいは、log4jのバージョン1.2.15ではなく、バージョン1.2.14に戻すこともできます(なぜ上記の依存関係を次のようにマークしなかったのでしょうか?オプション?!)。

おすすめ記事