无论如何,是否要排除从父POM继承的工件?

可以通过<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.jarfrom 的事实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>

...

回答:

一些想法:

  1. 在这种情况下,您可能根本无法从父项继承(并声明base排除项的依赖项)。如果您在父pom中有很多东西,则不方便。

  2. 要测试的另一件事是在父pom 下声明mail具有所需版本的工件以强制收敛(尽管我不确定这是否可以解决范围问题)。ALL-DEPS``dependencyManagement

    <dependencyManagement>

<dependencies>

<dependency>

<groupId>javax.mail</groupId>

<artifactId>mail</artifactId>

<version>???</version><!-- put the "right" version here -->

</dependency>

</dependencies>

</dependencyManagement>

  1. 或者mail,如果您不使用依赖于log4j的功能,则可以将其从log4j中排除(这就是我要做的):

    <dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.15</version>

<scope>provided</scope>

<exclusions>

<exclusion>

<groupId>javax.mail</groupId>

<artifactId>mail</artifactId>

</exclusion>

<exclusion>

<groupId>javax.jms</groupId>

<artifactId>jms</artifactId>

</exclusion>

<exclusion>

<groupId>com.sun.jdmk</groupId>

<artifactId>jmxtools</artifactId>

</exclusion>

<exclusion>

<groupId>com.sun.jmx</groupId>

<artifactId>jmxri</artifactId>

</exclusion>

</exclusions>

</dependency>

  1. 或者,您可以恢复到log4j的1.2.14版本,而不是异端的1.2.15版本(为什么它们不将上述依赖项标记为 可选 ?!)。

以上是 无论如何,是否要排除从父POM继承的工件? 的全部内容, 来源链接: utcz.com/qa/428962.html

回到顶部