종속성의 아티팩트는 <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
으로 범위가 지정된 상위에 존재하는 과 충돌 합니다 compile
.
해결책은 상위 POM에서 mail.jar을 제거하는 것이지만 base를 상속하는 대부분의 프로젝트는이를 필요로합니다 (log4j에 대한 전 이적 종속성). 그래서 내가하고 싶은 것은 단순히 부모 pom이 아닌 종속성 인 경우 수행 할 수있는 자식 프로젝트에서 부모의 라이브러리를 제외 하는 것입니다 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>
...