Конфликт зависимостей только в затмении

У нас есть несколько приложений в виде ряда модулей; мы использовали NetBeans. Я пытаюсь переместить разработку в затмение.

Все проекты построены с Maven. Один из них использует dbunit, а также POI. Когда я пытаюсь скомпилировать его в eclipse, он выдает ошибку из-за неверной сигнатуры метода. Ни сборка NetBeans с maven, ни сборка из командной строки не дают мне этой ошибки.

Я обнаружил, что компилятор пытается скомпилировать с использованием версии POI, более старой, чем та, которую мы используем. Конкретная версия POI обозначается в области компиляции как зависимость для dbunit, согласно информации о хранилище maven dbunit. Я не понимаю, почему это потянуло эту версию POI в мою компиляцию, так как я использую dbunit, а не компилирую ее.

Я также не понимаю, почему это происходит для затмения, а не для любой из двух других операций компиляции.

Я видел несколько комментариев на SO и на сайте отчетов об ошибках eclipse о том, как eclipse использует только один путь к классам, и что это будет трудно изменить, и что нет никаких планов измениться.

Если это правда, как другие люди справляются с этим? У меня не может быть единственного проекта в мире (или даже в моем городе), в котором используются библиотеки с зависимостями компиляции, которые конфликтуют с компиляцией проекта. Есть ли исправление m2e или обходной путь для затмения, возможно, что-то, что не включает изменение всех 20 файлов pom.xml?

1 ответ

Зависимости компиляции являются переходными. Плагин Maven2Eclipse использует для библиотеки только одну зависимость от дерева (вероятно, не такую, как у Maven).

Чтобы быть в безопасности, исключите POI при использовании dbunit:

<dependency>
  <groupId>org.dbunit</groupId>
  <artifactId>dbunit</artifactId>
  <version>...</version>
  <exclusions>
    <exclusion>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
    </exclusion>
  </exclusions>
</dependency>

Если вы используете более новую версию dbunit, такую ​​как 2.4.3, зависимость от POI является необязательной, то есть не транзитивной.

Другие вопросы по тегам