Gradle - как протестировать модуль, который использует новую версию SNAPSHOT артефакта другого модуля и последующее отображение версии в Maven pom? - PullRequest
0 голосов
/ 23 января 2020

Представьте, что существует большой многомодульный проект Gradle со многими модулями: для целей этого вопроса предположим, что есть модули modA, modB и modC. И modB, и modC используют артефакт modA. Артефакты публикуются в репозитории Maven.

Вот требования:

  1. Обычно modB и modC должны использовать последнюю версию modA. Если у проекта была версия 1.0 и это изменение представляет 1.1-SNAPSHOT, то тесты modB и modC должны включать тестирование против 1.1-SNAPSHOT. Все модули, использующие зависимость, должны быть опубликованы с новой версией 1.1. например, если modB проходит свои тесты, но modC не использует новую версию, тогда com.example:modA:1.1 и com.example: modB: 1.1 would be published, but not com.example: mod C: 1.1`.
  2. Модули должны иметь возможность закрепления, чтобы использовать более старую версию зависимости, если новая версия этой зависимости приводит к их сбою, например, modC может обычно использовать implementation 'com.example:modA:1.+' в качестве зависимости, но это должно быть прикреплено к implementation 'com.example:modA:1.0' в результате неудачного тестирования с использованием modA:1.1-SNAPSHOT.

Требование 2, по-видимому, указывает на то, что мы не можем использовать зависимости lib для многомодульного проекта (как подробно здесь ), потому что если есть изменение в modA, которое приводит к сбою modC, то в будущих сборках проекта будет использоваться новая версия modA, когда мы должны использовать 1.0, т.е. мы не закрепили modC на предыдущую версию modA. Нижестоящие проекты должны продвигаться с разной скоростью в отношении зависимостей, то есть недопустимо настаивать на том, что все они используют одну и ту же (последнюю) версию modA, и недопустимо настаивать на том, что они все используют последнюю версию modA, в результате которого все модули прошли соответствующие тесты.

Вопросы:

  1. Существует ли способ иметь несколько сборок проекта с разными версиями зависимостей (например, сборка с использованием implementation 'com.example:modA:1.0' и еще один с implementation 'com.example:modA:1.1-SNAPSHOT')?
  2. Как выполнить сборку с артефактом, который был только что собран из предыдущей задачи, когда новая версия этого артефакта не будет разрешена пока этот артефакт не был опубликован? Нужно ли запускать их как отдельные прогоны Gradle, например:

    . / Gradlew: modA: publishToMavenLocal ./gradlew: modB: test

, где :modB:test - это каким-то образом настроен на использование -SNAPSHOT зависимостей или я могу сделать это за один прогон Gradle:

./gradlew :modA:publishToMavenLocal :modB:test
Если тесты пройдены для modB с использованием modA:1.1-SNAPSHOT, как мне записать в Maven pom для modB новую разрешенную версию для modA, то есть modA:1.1?

Я застрял с текущим подходом моно-репо к созданию проекта - я не могу разделить это на отдельные проекты для `каждого модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...