Maven: удалить одну транзитивную зависимость
Мой проект включает файл jar, потому что он указан как транзитивная зависимость.
Однако, я проверял не только то, что мне это не нужно, но и вызывает проблемы, потому что класс внутри файлов jar меняет класс, который мне нужен в другом файле jar.
Как я могу оставить один файл jar из моих транзитивных зависимостей?
Ответы
Ответ 1
Вы можете исключить зависимость следующим образом:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
Ответ 2
Правильный способ - использовать механизм исключений, однако иногда вы можете вместо этого использовать следующий хак, чтобы избежать добавления большого количества исключений, когда множество артефактов имеют одну и ту же транзитивную зависимость, которую вы хотите игнорировать. Вместо указания исключения вы определяете дополнительную зависимость с объемом "предоставленного". Это говорит Maven, что вы вручную позаботитесь об обеспечении этого артефакта во время выполнения, и поэтому он не будет упакован. Например:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
Побочный эффект: вы должны указать версию игнорируемого артефакта, и его POM будет восстановлен во время сборки; это не относится к регулярным исключениям. Это может быть проблемой для вас, если вы запустите свой закрытый репозиторий Maven за брандмауэром.
Ответ 3
Вы можете сделать это, явно исключив проблемный артефакт. Возьмите зависимость, которая включает в себя проблему, и отметьте ее, чтобы ее исключить:
На веб-сайте maven :
<dependency>
<groupId>group-a</groupId>
<artifactId>artifact-a</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>group-c</groupId>
<artifactId>excluded-artifact</artifactId>
</exclusion>
</exclusions>
</dependency>