Артефакти із залежностей можна виключити, оголосивши <exclusions>
елемент всередині A, <dependency>
але в цьому випадку потрібно виключити артефакт, успадкований від батьківського проекту. Витяг обговорюваної УОЗ наступний:
<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
.
Рішенням може бути позбавлення mail.jar від батьківського POM, але більшість проектів, які успадковують базу, потребують цього (як це перехідна залежність для log4j). Тож, що я хотів би зробити, це просто виключити батьківську бібліотеку з дочірнього проекту , як це можна зробити, якби base
залежність, а не батьківська пом:
...
<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>
...