Как создать проект Gradle с несколькими сборками с взаимозависимыми проектами весенней загрузки и jar-файлами

Задний план

Я написал проект весенней загрузки, используя gradle, и он отлично работает. Я хотел бы разбить проект на библиотеки (jar-файлы), чтобы я мог их повторно использовать.

Это требования

  1. Каждый из проектов находится в дочерних папках, каждая из которых содержит собственное репозиторий.git.
  2. Проект с несколькими сборками должен находиться в одноуровневой папке, а не в папке, содержащей дочерние проекты. Он также содержит собственное репозиторий.git.
  3. Проекты, которые используются только как библиотеки (jar), имеют тесты, помеченные @SpringBootTest и они должны запускаться независимо.
  4. Проекты, которые используются как библиотеки классов, должны предоставляться другим проектам как "тонкие банки" без включения каких-либо зависимостей. В используемый проект необходимо добавить все зависимости, накопленные всеми используемыми им проектами.
  5. Должна быть возможность построить каждый дочерний проект независимо. Для проектов, которые зависят от других проектов в наборе, это означает, что при построении проекта будут использоваться выходные данные других проектов (jar), которые ему нужны, и если этот результат не готов, gradle сначала построит эти проекты.
  6. Должна быть предусмотрена возможность сборки всех проектов из родительского проекта с несколькими проектами (зависимости будут проработаны, и будут выполняться только необходимые сборки).
  7. При сборке всего пакета с несколькими проектами будет создана развертываемая папка, содержащая родительскую загрузочную банку и все ее зависимости.
  8. Я хотел бы иметь возможность создавать проекты, редактировать и отлаживать все вышеперечисленное с помощью Intellij.

Минимальный воспроизводимый пример

Я загрузил здесь минимальный воспроизводимый пример (репекс): https://github.com/david-sackstein/multiproject
Он содержит три папки:

  1. productcommon это банка с публичным классом ProductFactory.
  2. productservice - это приложение SpringBoot с одним @RestControllerкоторый вызывает открытый метод ProductFactory в одном из своих методов. productservice имеет проект, зависящий от productcommon.
  3. multiproject это проект Gradle без кода, который зависит от productcommon а также productservice
  4. Я соответственно настраиваю build.gradle и settings.gradle во всех трех проектах.

Когда я строю productservice это не удается - очевидно, потому что проект импорта productcommon терпит неудачу.

Что отсутствует или неверно в этом примере?

1 ответ

Решение

Сегодня я наткнулся на отличный пост на эту тему: https://reflectoring.io/spring-boot-gradle-multi-module от Тома Хомбергса.

Том также предоставляет отличный пример по адресу:https://github.com/thombergs/buckpal

После работы с его архитектурой у меня могут появиться некоторые вопросы по этому поводу, но на данный момент я доволен этим решением.

Другие вопросы по тегам