2015-09-23 4 views
0

У меня есть два проекта, которые я собираю и запускаю вместе. Эти проекты используют разные версии определенных банок. поэтому я могу иметь foo.1.15.jar и foo.1.16.jar как в моем maven репо. Файлы pom правильно определяют, какой проект должен использовать этот jar, и я могу запустить mvn verify для запуска всех моих тестов интеграции без проблем из командной строки.Тесты Eclipse junit с использованием неправильной версии maven jars

Однако, когда я пытаюсь запустить тест junit изнутри затмения, я часто сталкиваюсь с ошибками с неправильной версией используемой банки. Я считаю, что eclipse всегда использует самую новую версию jar, которую он находит в maven repo, поэтому, если он увидит foo.1.15 и foo.1.16, он будет использовать версию 16. Проблема в том, что я хочу 15 версии, тесты не сработают, если они работают с 16-й версией, потому что она не совместима с обратной совместимостью.

Как заставить eclipse признать, что ему нужно использовать более старую версию? В частности, есть ли способ, с помощью которого тесты junit распознают мой файл pom и используют правильные версии jar, указанные в pom?

Я использую m2eclipse, если это необходимо.

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

Проблема в том, что мой проект A использует мой проект B. Использует foo.16 и B использует foo.15. тесты junit для A пытаются использовать foo.16, даже если в нем запущены классы в B, которые зависят от 15. Однако я не могу изменить зависимости, A нуждается в 16 и B. 15. Могу ли я заставить eclipse понять это?

ответ

1

Ваше предположение о Eclipse всегда использует последнюю версию артефакта Maven неверно.

Однако Eclipse поддерживает только один путь к классу в проекте и не может отличать области зависимостей Maven, поэтому зависимости между областями проверки также находятся в пути к компиляции и времени выполнения Eclipse. Трудно сказать, действительно ли это связано с вашей проблемой.

Вы можете открыть редактор POM и просмотреть вкладку Иерархия зависимостей, чтобы узнать (транзитивный) путь зависимостей и версию, используемую для каждого артефакта. Это может дать вам ключ к исправлению вашей установки.

+0

Ваш правильный. Похоже, проблема в том, что мой проект A использует мой проект B. Использует foo.16 и B использует foo.15. junit внутри пытается использовать foo.16, даже когда он запускает классы в B, которые зависят от 15. Однако я не могу изменить зависимости, A нуждается в 16 и B. 15. Могу ли я заставить eclipse понять это? – dsollen

+0

Вот ссылка на билет Eclipse: https://bugs.eclipse.org/bugs/show_bug.cgi?id=376616 – ljader

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