Артефакты от зависимостей могут быть исключены путем объявления <exclusions>
элемент внутри a <dependency>
Но в этом случае необходимо исключить артефакт, наследованный от родительского проекта. Выборка рассматриваемого АНГЛИЧАНИНА следует:
<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
.
Решение могло состоять в том, чтобы избавить от mail.jar от родительского АНГЛИЧАНИНА, но для большинства проектов, которые наследовали основу, нужна она (как переходная зависимость для log4j). Таким образом, то, Что я хотел бы сделать, должно просто исключить библиотеку родителя из дочернего проекта, поскольку это могло быть сделано если 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>
...
Некоторые идеи:
Возможно, в этом случае вы просто не могли бы наследовать от родителя (и объявить зависимость от база
за исключением). Не удобно, если в родительском помпе много чего.
Еще одна вещь, которую нужно проверить, - это объявить артефакт mail
с версией, требуемой для ALL-DEPS
, в dependencyManagement
в родительском pom, чтобы заставить конвергенция (хотя я не уверен, что это решит проблему определения объема).
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>???</version><!-- put the "right" version here -->
</dependency>
</dependencies>
</dependencyManagement>
mail
из 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>
Вы пробовали явно объявить нужную вам версию mail.jar? Разрешение зависимостей Maven должно использовать это для разрешения зависимостей во всех других версиях.
<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>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>VERSION-#</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>ALL-DEPS</artifactId>
<version>1.0</version>
<scope>provided</scope>
<type>pom</type>
</dependency>
</dependencies>
</project>