可以通过在 --- 中声明一个 <dependency>
<exclusions>
元素来排除依赖项,但在这种情况下,需要排除从父项目继承的工件。正在讨论的 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>
...
原文由 Miguel 发布,翻译遵循 CC BY-SA 4.0 许可协议
一些想法:
在这种情况下,也许您根本无法从父级继承(并声明对
base
的依赖,但排除)。如果父 pom 中有很多东西,则不方便。要测试的另一件事是声明
mail
具有 --- 所需版本的工件 --- 在ALL-DEPS
下dependencyManagement
在父 pom 中强制收敛我不确定这是否会解决范围问题)。mail
依赖项(这就是我要做的):