可以通过<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.jar
,并且ALL-DEPS
取决于同一库的另一个版本。由于执行环境上存在mail.jar
from 的事实ALL-DEPS
,尽管未导出,但与mail.jar
父级上存在的from发生冲突,范围为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>
...