Используя Maven, я хочу запустить модульные и интеграционные тесты для предварительно скомпилированного / предварительно спроектированного многомодульного проекта. Я нахожу это чрезвычайно трудным.
Мой бизнес-пример заключается в том, что я хочу скомпилировать и собрать мультимодульный проект Maven в одном месте, а затем запустить модульное тестирование и интеграционные тесты с использованием разных версий Java и в разных операционных системах, чтобы проверить совместимость. Давайте просто скажем {Java 8, Java 10} x {Ubuntu, Windows}, чтобы все было просто.
Причина, по которой я хочу скомпилировать и выполнить сборку в одном темпе, заключается в том, что я хочу убедиться, что я запускаю тесты реального поставляемого кода. Если я перекомпилирую везде, я боюсь, что могу непреднамеренно вносить ошибки.
Одним из решений является выполнение mvn deploy -DaltDeploymentRepository=$mydir
в Ubuntu для создания скомпилированного дерева проекта и каталога, полного jar; затем сжать дерево проекта, развернуть каталог и отправить его на компьютер с Windows; и там работает mvn surefire:test -Dmaven.repo.local=$mydir
на дереве проекта.
Это работает, но это неуклюже. Кажется, что Surefire читает тестовые классы в дереве проекта и использует классы в том же проекте + зависимости jar из репозитория развертывания для связи. Проблема в том, что -Dmaven.repo.local
Maven должен снова загрузить все сторонние зависимости, потому что это репо содержит только артефакты моего проекта. Так что твердый раствор, но не отличный.
Вместо этого я просто использую скомпилированное дерево проекта:
- Если я просто сделаю
mvn surefire:test
У меня возникнут проблемы с разрешением зависимостей
- Я пытался
mvn compile -Dmaven.main.skip surefire:test
исправить разрешение зависимостей, которое, кажется, работает - только не для тестовых зависимостей
- Я также попытался
mvn compile -Dmaven.main.skip test-compile -Dmaven.test.skip surefire:test
, но по какой-то причине, которая также не работает, сборка снова не удается разрешить тестовые зависимости.
Интересно, что это не является детерминированным, сбои происходят на разных этапах, а иногда и вовсе - я иногда получаю зеленую сборку!
И теперь я в своем уме: я продолжаю думать, что это должно быть просто, и что я не могу быть первым человеком, борющимся с этой простой проблемой.
Мне непонятно, что происходит с реактором, когда и как он срабатывает. График зависимостей должен быть правильно сформирован или не может быть скомпилирован. Так почему я не могу заставить Maven воспроизводить тот же граф зависимостей для запуска тестов?
С уважением,
Ласс
PS: Это связано с тем, с чем у моего уважаемого коллеги Бена тоже были проблемы: Как я могу запустить интеграционные тесты после сборки всех модулей в многомодульном проекте Maven?