Композитные проекты
Композитный проект в Jmix представляет собой структуру проекта, которая объединяет несколько связанных дополнений и приложений в единый проект IDE, даже если они находятся в разных репозиториях исходного кода.
Создание композитного проекта
Чтобы создать пустой композитный проект, запустите мастер создания проекта и выберите шаблон Composite Project. Studio создаст проект со следующей структурой (для примера взято имя проекта sales
):
root-dir/ sales-all/ build.gradle settings.gradle
Затем вы можете добавить подпроекты, создав новые дополнения или приложения, выбрав существующий проект из системы контроля версий (VCS) или просто добавив существующую папку с проектом. Используйте действия New → Subproject в окне инструментов Jmix:
Мы рекомендуем размещать подпроекты внутри корневого каталога рядом с проектом-агрегатором <project-name>-all
.
Studio отображает композитный проект и все подпроекты в виде узлов верхнего уровня в Окне инструментов Jmix:
Как вы можете видеть, файл settings.gradle
проекта-агрегатора использует инструкции includeBuild
. Эти инструкции используют функцию composite build Gradle, которая помогает эффективно структурировать проекты.
В композитном билде Gradle заменяет зависимости от артефактов прямыми зависимостями между подпроектами. Это означает, что изменения, внесенные в дополнение, немедленно влияют на зависимые дополнения и приложение. IntelliJ IDEA идеально импортирует такой проект, распознавая зависимости, определенные Gradle. В результате вы получаете структуру композитного проекта, которая обеспечивает прозрачный рефакторинг и устраняет необходимость в подходе "publish locally".
Открытие композитного проекта
При открытии композитного проекта, убедитесь, что вы перешли в директорию проекта-агрегатора <project-name>-all
и открыли файл build.gradle
в этой директории:
Управление свойствами
Вы можете редактировать общие свойства всех подпроектов. Нажмите 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 будут одинаковыми.