Конфликт зависимостей только в затмении
У нас есть несколько приложений в виде ряда модулей; мы использовали 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 является необязательной, то есть не транзитивной.