Как создать проект Gradle с несколькими сборками с взаимозависимыми проектами весенней загрузки и jar-файлами
Задний план
Я написал проект весенней загрузки, используя gradle, и он отлично работает. Я хотел бы разбить проект на библиотеки (jar-файлы), чтобы я мог их повторно использовать.
Это требования
- Каждый из проектов находится в дочерних папках, каждая из которых содержит собственное репозиторий.git.
- Проект с несколькими сборками должен находиться в одноуровневой папке, а не в папке, содержащей дочерние проекты. Он также содержит собственное репозиторий.git.
- Проекты, которые используются только как библиотеки (jar), имеют тесты, помеченные
@SpringBootTest
и они должны запускаться независимо. - Проекты, которые используются как библиотеки классов, должны предоставляться другим проектам как "тонкие банки" без включения каких-либо зависимостей. В используемый проект необходимо добавить все зависимости, накопленные всеми используемыми им проектами.
- Должна быть возможность построить каждый дочерний проект независимо. Для проектов, которые зависят от других проектов в наборе, это означает, что при построении проекта будут использоваться выходные данные других проектов (jar), которые ему нужны, и если этот результат не готов, gradle сначала построит эти проекты.
- Должна быть предусмотрена возможность сборки всех проектов из родительского проекта с несколькими проектами (зависимости будут проработаны, и будут выполняться только необходимые сборки).
- При сборке всего пакета с несколькими проектами будет создана развертываемая папка, содержащая родительскую загрузочную банку и все ее зависимости.
- Я хотел бы иметь возможность создавать проекты, редактировать и отлаживать все вышеперечисленное с помощью Intellij.
Минимальный воспроизводимый пример
Я загрузил здесь минимальный воспроизводимый пример (репекс): https://github.com/david-sackstein/multiproject
Он содержит три папки:
productcommon
это банка с публичным классомProductFactory
.- productservice - это приложение SpringBoot с одним
@RestController
который вызывает открытый метод ProductFactory в одном из своих методов. productservice имеет проект, зависящий от productcommon. multiproject
это проект Gradle без кода, который зависит отproductcommon
а такжеproductservice
- Я соответственно настраиваю build.gradle и settings.gradle во всех трех проектах.
Когда я строю productservice
это не удается - очевидно, потому что проект импорта productcommon
терпит неудачу.
Что отсутствует или неверно в этом примере?
1 ответ
Сегодня я наткнулся на отличный пост на эту тему: https://reflectoring.io/spring-boot-gradle-multi-module от Тома Хомбергса.
Том также предоставляет отличный пример по адресу:https://github.com/thombergs/buckpal
После работы с его архитектурой у меня могут появиться некоторые вопросы по этому поводу, но на данный момент я доволен этим решением.