依存関係からのアーティファクトは、<exclusions>
要素をa内で宣言することによって除外できますが<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.jar
、ALL-DEPS
同じライブラリの別のバージョンに依存しています。事実によるものmail.jar
からALL-DEPS
エクスポートされていないが、と衝突実行環境上に存在する、mail.jar
としてスコープされた親、上に存在することcompile
。
解決策は、親POMからmail.jarを取り除くことですが、baseを継承するほとんどのプロジェクトは、それを必要とします(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>
...