Композитные проекты
Композитный проект в Jmix представляет собой структуру проекта, которая объединяет несколько связанных дополнений и приложений в единый проект IDE, независимо от того, находятся ли они в одном или в разных репозиториях исходного кода.
Чтобы больше узнать о мотивации и предпосылках этой функциональности, см. статью Дополнения и композитные проекты в блоге Jmix.
Создание композитного проекта
Чтобы создать пустой композитный проект, запустите мастер создания проекта и выберите один из шаблонов Composite Project.
Если вы выберете шаблон Composite Project for Monorepo, Studio создаст проект с файлами сборки в корневой папке:
root-dir/ build.gradle settings.gradle
Если вы выберете шаблон Composite Project for Separate Repositories, Studio создаст проект со следующей структурой (для примера взято имя проекта sales
):
root-dir/ sales-all/ build.gradle settings.gradle
Затем вы можете добавить подпроекты, создав новые дополнения или приложения, выбрав существующий проект из системы контроля версий (VCS) или просто добавив существующую папку с проектом. Используйте действия New → Subproject в окне инструментов Jmix:

Studio отображает композитный проект и все подпроекты в виде узлов верхнего уровня в Окне инструментов Jmix:

Как вы можете видеть, файл settings.gradle
проекта-агрегатора использует инструкции includeBuild
. Эти инструкции предоставляются функциональностью composite build Gradle.
В композитном билде Gradle заменяет зависимости от артефактов прямыми зависимостями между подпроектами. Это означает, что изменения, внесенные в дополнение, немедленно влияют на зависимые дополнения и приложение. IntelliJ IDEA импортирует такой проект, распознавая зависимости, определенные Gradle. В результате вы получаете структуру композитного проекта, которая обеспечивает прозрачный рефакторинг и устраняет необходимость в подходе "publish locally".
Открытие композитного проекта
При открытии композитного проекта, убедитесь, что вы перешли в каталог проекта-агрегатора и открыли файл build.gradle
в этом каталоге.
Если композитный проект был создан с использованием шаблона Composite Project for Monorepo, его файл build.gradle
находится в корневой папке.
Если композитный проект был создан с использованием шаблона Composite Project for Separate Repositories, его файл build.gradle
находится в папке <project-name>-all
:

Управление свойствами
Вы можете редактировать общие свойства всех подпроектов. Нажмите Settings → Project Properties на панели инструментов Окна инструментов Jmix. Выберите All subprojects, когда Studio спросит вас, какой проект нужно отредактировать:

Общие свойства включают в себя настройки репозитория артефактов и версию фреймворка Jmix. Таким образом, вы можете сразу обновить все подпроекты до более новой версии Jmix.
Настройка зависимостей
Самая полезная функция для больших композитных проектов - это возможность настраивать зависимости между подпроектами в простом диалоговом окне.
Вы можете открыть его с помощью действия Settings → Dependencies Between Subprojects в окне инструментов Jmix.

Здесь customers - это дополнение, которое зависит от дополнения users. В соответствии с изменениями, которые вы вносите в этом диалоге, Studio добавляет зависимости от артефактов в файлы build.gradle
подпроектов, а также настраивает аннотации @JmixModule дополнений. Studio также предотвращает появление циклических зависимостей. На скриншоте ниже вы можете видеть, что диалог не позволяет сделать дополнение users зависимым от customers, потому что customers уже зависит от users:

Управление хранилищами данных
Studio может генерировать файлы Liquibase changelog в дополнениях, в том числе при работе с ними в композитных проектах.
Чтобы сгенерировать файл changelog, в дополнении нужно определить хранилище данных. Оно будет отображено в дереве Jmix:

Настройки хранилища будут сохранены в файле jmix-studio.xml
вместо конфигурации Java.
Теперь в хранилище данных можно выполнить действие Generate Liquibase Changelog.
В композитном проекте необходимо снова указать хранилище данных для того же дополнения, поскольку композитный проект имеет свой собственный файл jmix-studio.xml
, расположенный в проекте-агрегаторе в корне или в каталоге <project-name>-all
. Таким образом, настройки хранилища данных при работе над дополнением в отдельном и композитном проектах будут храниться отдельно, но набор сгенерированных changelogs будут одинаковыми.