0

У меня есть две зависимости, artifact-a и artifact-b. Каждый из них зависит от другой версии artifact-c. Как я могу затенять артефакты для использования этих разных зависимостей? (Или же иметь артефакт-а использовать тенистую зависимость и артефакт-б использовать нормальный.Как может Maven Shade Plugin перемещать несколько версий транзитивной зависимости?

 <dependency> 
      <groupId>group-a</groupId> 
      <artifactId>artifact-a</artifactId> 
      <version>2.1.0</version> 
<!-- artifact-a uses version 3 of artifact-c. 
How do I relocate version 3 without conflicting with version 4? 
       <groupId>group-c</groupId> 
       <artifactId>artifact-c</artifactId> 
       <version>3.0.0</version> 
--> 
     </dependency> 
     <dependency> 
      <groupId>group-b</groupId> 
      <artifactId>artifact-b</artifactId> 
      <version>1.5.0</version> 
<!-- artifact-b uses version 4 of artifact-c. 
How do I relocate version 4 without conflicting with version 3? 
       <groupId>group-c</groupId> 
       <artifactId>artifact-c</artifactId> 
       <version>4.0.0</version> 
--> 
     </dependency> 
+0

могли бы вы попробовать использовать ' группа-с: артефакт-с: *: 4.0.0 группа-с: артефакт-с: *: 3.0.0 'в пределах Maven тени конфигурации. – nullpointer

+0

Я не думаю, что это возможно. Обычно Maven игнорирует одну из зависимостей (при анализе зависимостей она будет говорить «опущена для версии x.y.z»). Использование двух разных зависимостей, содержащих одни и те же классы, не будет работать, если вы полностью не разделили зависимости с помощью разных загрузчиков классов. – john16384

+0

@nullpointer спасибо, но я не могу исключить любую из этих версий «c», так как «a» и «b» требуют разные версии «c». –

ответ

0

Это, вероятно, может сделать путем создания нового Maven модулей, единственной целью которых является оттенок artifact- и его зависимость (соответственно артефакт-б). Затем, основной модуль будет зависеть от этих двух новых модулей.

Смежные вопросы