Artefak dari dependensi dapat dikecualikan dengan mendeklarasikan sebuah <exclusions>
elemen di dalam a. <dependency>
Namun dalam hal ini diperlukan untuk mengecualikan artefak yang diwarisi dari project induk. Berikut kutipan dari Badan POM yang sedang dibahas:
<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
artefak, bergantung pada javax.mail:mail-1.4.jar
, dan ALL-DEPS
bergantung pada versi lain dari pustaka yang sama. Karena fakta bahwa mail.jar
dari yang ALL-DEPS
ada di lingkungan eksekusi, meskipun tidak diekspor, bertabrakan dengan mail.jar
yang ada di induk, yang dicakup sebagai compile
.
Solusinya mungkin dengan menyingkirkan mail.jar dari POM induk, tetapi sebagian besar proyek yang mewarisi basis, membutuhkannya (seperti ketergantungan transtif untuk log4j). Jadi Yang ingin saya lakukan adalah mengecualikan pustaka induk dari proyek anak , karena ini bisa dilakukan jika base
merupakan ketergantungan dan bukan pom induk:
...
<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>
...