Существует обходной путь, использующий механизм relocation , хотя он может работать только в определенных средах.
Вкратце relocation позволяет вам «перенаправить» все зависимостинапример, от javax.xml.stream:stax
до stax:stax
.Проблема в том, что добавить перемещение - это не то, что вы можете сделать в своем собственном проекте.Вы должны добавить новую версию к исходным groupId
и artifactId
, содержащую информацию о перемещении.Если у вас есть частный (например, корпоративный) репозиторий Maven, вы можете добавить его туда или, если разработчиков немного, можно использовать локальный репозиторий разработчиков.В других случаях вам, вероятно, не повезло с этим решением.
Теперь подробности:
Создайте новый проект Maven с pom.xml
, например:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- Coordinates of the artifact you want to replace -->
<groupId>javax.xml.stream</groupId>
<artifactId>stax</artifactId>
<!-- Some dummy version that would never be released -->
<version>relocate-to-stax</version>
<distributionManagement>
<relocation>
<!-- Coordinates of the new artifact -->
<groupId>stax</groupId>
<!-- artifactId stays the same → no need to specify again -->
</relocation>
</distributionManagement>
</project>
Добавьте это в свой репозиторий (например, используя mvn install
).
В вашем проекте добавьте эту новую версию для артефакта в раздел dependencyManagement
:
<project>
<!-- ... -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax.xml.stream</groupId>
<artifactId>stax</artifactId>
<version>relocate-to-stax</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
Спри этом все зависимости javax.xml.stream:stax
будут использовать "версию" relocate-to-stax
, которая будет перемещена в stax:stax:relocate-to-stax
.Осталось только добавить нужную версию целевого артефакта в dependencyManagement
:
<project>
<!-- ... -->
<dependencyManagement>
<dependencies>
<!-- ... -->
<dependency>
<groupId>stax</groupId>
<artifactId>stax</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>