Композитные проекты

Композитный проект в 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:

new subprojects

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

composite projects structure

Как вы можете видеть, файл 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:

open composite project

Управление свойствами

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

composite project edit properties

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

Настройка зависимостей

Самая полезная функция для больших композитных проектов - это возможность настраивать зависимости между подпроектами в простом диалоговом окне.

Вы можете открыть его с помощью действия Settings → Dependencies Between Subprojects в окне инструментов Jmix.

composite project dependencies

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

composite project dependencies 2

Управление хранилищами данных

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

Чтобы сгенерировать файл changelog, в дополнении нужно определить хранилище данных. Оно будет отображено в дереве Jmix:

add on data store

Настройки хранилища будут сохранены в файле jmix-studio.xml вместо конфигурации Java.

Теперь в хранилище данных можно выполнить действие Generate Liquibase Changelog.

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