Могу ли я заставить maven-зависимость A использовать конкретную версию зависимости B, одновременно используя другую версию зависимости B? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть два проекта maven, давайте назовем их master и aux. Master зависит от aux, а также от конкретной версии org.apache.httpcomponents.httpclient. Aux зависит от более поздней версии org.apache.httpcomponents.httpclient.

1010 *, например *

<project...>
  <artifactId>master</artifactId>
  <groupId>com.my-company</groupId>

  <dependencies>

    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>earlier version</version>
    </dependency>

    <!--<uses later version of http client>-->
    <dependency>
      <groupId>com.my-company</groupId>
      <artifactId>aux</artifactId>
    </dependency>

    ...
  </dependencies>
  ...
</project>

Однако aux зависит от классов, найденных только в более новой версии httpclient, а зависимости master от httpclient несовместимы, так что, какую бы версию я исключил, вызовы REST не выполняются в ожидаемые места.

Есть ли способ потребовать aux для использования более новой зависимости и master для использования более старой?

Я знаю, что могу согласовать aux и master, исправив их, чтобы иметь возможность использовать одну и ту же зависимость, но это было бы далеко от идеала.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Вы не можете иметь несколько версий одной и той же библиотеки / классов в пути к классам одновременно.Вам придется разделить «master» и «aux» на отдельные jar-файлы, встраивая нужную версию httpclient и загрузить каждый jar-файл с собственным загрузчиком классов.

Существует платформа под названием OSGi, которая делает именно это,Это может быть излишним для вашего приложения, но если вы хотите начать, вы можете взглянуть на OSGi enRoute .

0 голосов
/ 15 ноября 2018

Вы можете написать собственный загрузчик классов, чтобы загрузить указанную версию класса, потому что загрузчик классов по умолчанию просто выберет первый из найденных путей к классам.

...