1

Мы используем Maven и Nexus для распространения компонентов (проектов Maven) внутри нашей инфраструктуры. Ради аргумента, допустим, у нас есть две команды: Team Foo и Team Bar; и что компонент из Bar зависит от компонента от Foo.Как мне получить последнюю версию проекта Maven для тестирования контракта?

Команда Bar хочет написать контрактные тесты для проверки того, работает ли компонент foo, как и ожидалось. Те тесты будут проводиться каждую ночь против последней стабильной версии проекта foo (git master после CI). Может ли командный бар написать проект Maven bar/pom.xml, который зависит от последней версии foo? Как мы можем это сделать?

Мы играем с идеей решения этой проблемы путем именования версий. Мы всегда будем называть разрабатываемую версию как master-SNAPSHOT (или что-то еще), а вместо ярлыка версии 0.1-SNAPSHOT -> 0.1 -> 0.2-SNAPSHOT -> 0.2 оно всегда будет возвращаться к master-SNAPSHOT, например master-SNAPSHOT -> 0.1 -> master-SNAPSHOT -> 0.2. Проект по тестированию контрактов bar мог бы объявить свою зависимость до foo как com.acme:foo:master-SNAPSHOT.

Но это кажется слишком неуклюжим (нарушает обычную практику Maven и т. Д.) ... Существует ли более стандартная практика для такого рода вещей? Должны ли мы использовать Maven Versions Plugin? Должны ли мы вставлять последнюю версию в проект Maven извне? Или, может быть, канава Мейвена?

+0

Почему ' -SNAPSHOT' не подходит? – lexicore

+0

подходит. но он аналогичен «master-SNAPSHOT». или не так ли? –

+0

Я не имел в виду '' буквально, я имел в виду '0.1-SNAPSHOT',' 0.2-SNAPSHOT' и т. Д. – lexicore

ответ

2

Тестовый модуль контракта обычно имеет очень прочную связь с модулем, реализующим контракт.

Таким образом, я рекомендую развить оба модуля рядом друг с другом в рамках родительского проекта.

foo и bar модули мультимодульного проекта maven. Затем сделайте bar зависеть от foo как и вы сами. Назначьте ту же версию ${parent.version}. Это означает, что вы используете ${parent.version}-SNAPSHOT между релизами.

Продолжайте разрабатывать и выпускать свой проект, как и с одним модулем, предпочтительно с помощью maven-release-plugin на выпуск. Он будет поднимать версии всех модулей одновременно как часть цели release:prepare.

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