Los artefactos de las dependencias se pueden excluir declarando un <exclusions>elemento dentro de un <dependency>Pero en este caso es necesario excluir un artefacto heredado de un proyecto principal. A continuación, se muestra un extracto del POM en discusión:
<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>
baseartefacto, depende javax.mail:mail-1.4.jary ALL-DEPSdepende de otra versión de la misma biblioteca. Debido al hecho de que mail.jardesde ALL-DEPSexiste en el entorno de ejecución, aunque no se exporta, choca con el mail.jarque existe en el padre, que tiene el alcance compile.
Una solución podría ser eliminar mail.jar del POM principal, pero la mayoría de los proyectos que heredan la base la necesitan (como es una dependencia transtiva para log4j). Entonces, lo que me gustaría hacer es simplemente excluir la biblioteca principal del proyecto secundario , ya que se podría hacer si basefuera una dependencia y no el pom principal:
...
<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>
...