Maven - перенес код в новый артефакт;проблема переходных зависимостей - PullRequest
1 голос
/ 07 декабря 2011

Вот моя ситуация:

  • Я создал новый артефакт в библиотеке с именем «web-ng-framework» и перенес в него код из старого артефакта в библиотеке «web»
  • Я удалил «сетевой» артефакт

А вот и проблема:

  • ProjectA использует более старую версию библиотеки и поэтому имеет зависимость компиляции от 'web'
  • ProjectB зависит от ProjectA
  • ProjectB использует последнюю версию библиотеки, поэтому при сборке ProjectB он содержит библиотеки «web» и «web-ng-framework», что вызывает возможный конфликт

Кто-нибудь знает, как я могу это решить? Спасибо!


EDIT:

Будет ли лучше работать 'перемещение' web 'в' web-ng-framework '? В ProjectA я мог бы включить зависимость от «web», чтобы Maven увидел, что ему действительно нужен «web-ng-framework». Будет ли это работать?

Ответы [ 3 ]

9 голосов
/ 07 декабря 2011

При включении ProjectA в ProjectB исключить веб. Как это

<dependency>
  <groupId>your.group</groupId>
  <artifactId>projectA</artifactId>
   <exclusions>
     <exclusion>
       <groupId>your.group</groupId>
       <artifactId>web</artifactId>
     </exclusion>
   </exclusions>
</dependency>
1 голос
/ 13 сентября 2012

Классическим решением этой проблемы является хак «Версия 99».

Чтобы сделать это, используйте следующее в корневой папке:

<dependencyManagement>
  <dependency>
     <groupId>your.group</groupId>
     <artifactId>web</artifactId>
     <version>99.0-does-not-exist</version>
  </dependency>
</dependencyManagement>

Затем поместите пустой веб-99,0-не-существует.pom и web-99.0-не-существует.jar в вашем хранилище.Это гарантирует, что каждый проект, который наследуется от этого корневого модуля, больше не получит старую версию web.jar.

0 голосов
/ 18 сентября 2012

Я предлагаю вам использовать необязательные зависимости

Этого можно добиться, сделав web зависимость необязательной в projectA.

<project>
  <groupId>some.group</groupId>
  <artifactId>projectA</artifactId>
  ...
  <dependencies>
    <!-- declare the dependency to be set as optional -->
    <dependency>
      <groupId>some.group</groupId>
      <artifactId>web</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
  </dependencies>
</project>

При объявлении какого-либо другого проекта, который зависит от projectA, зависимость web не будет включена.

<project>
  <groupId>some.group</groupId>
  <artifactId>projectB</artifactId>
  ...
  <dependencies>
    <dependency>
      <groupId>some.group</groupId>
      <artifactId>projectA</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>some.group</groupId>
      <artifactId>web-ng-framework</artifactId>
      <version>1.0</version>
    </dependency>
  </dependencies>
</project>

Теперь projectB будет зависеть только от projectA и web-ng-framework, а не web.

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