Конфигурация проекта#
Файл project.yaml в корне прикладного проекта задает параметры его сборки: версии Java и Scala, источники компонентов, комплекты сборки и состав модулей. Подробнее об устройстве проекта см. в разделе Проект.
Пример конфигурации#
# Основные параметры проекта
scalaFeatureRelease: 2.13
javaFeatureRelease: 21
commonLibConfigVersion: 2
baseBuildKit:
name: "<имя_базового_комплекта>"
version: "<версия_базового_комплекта>"
applicationServer:
source: "base://"
sbtPlugin:
source: "base://"
modules:
- gtk:
source: "base://"
- btk:
source: "base://"
- <имя_модуля>:
source: "<адрес_репозитория>"
branch: "<ветка>"
# Публикация и репликация исходного кода модуля
isPublish: true
mirrorSource: "<адрес_репозитория_реплики>"
# Необязательные параметры
# Публикация проекта в комплект сборки
buildKit:
name: "<имя_публикуемого_комплекта>"
version: SNAPSHOT
# Публикация исходного кода решения
isPublishSrcFolder: true
# Переменные окружения сборки
env:
orm: dblink
# Загрузка коробочной конфигурации
baseSourceKit:
url: "<адрес_репозитория>"
branch: "<ветка>"
# Репликация комплекта исходников
mirrorSourceKit:
isPublish: true
mirrorConfigSource: "<адрес_репозитория_реплики>"
# Прикладные подпроекты — Technical Preview
subprojects:
- <имя_подпроекта>:
source: "<адрес_репозитория>"
branch: "<ветка>"
Описание полей конфигурации#
Основные параметры
scalaFeatureRelease(строка) — функциональная версия Scala для сборки проекта. Если поле отсутствует, sbt-plugin использует версию по умолчанию. Между функциональными версиями Scala может отсутствовать бинарная и исходная совместимость.javaFeatureRelease(строка) — функциональная версия Java. Если поле отсутствует, sbt-plugin использует версию по умолчанию. Значение также определяет подключение каталогаsrc/main/java-<версия>, если такой каталог есть в модуле.commonLibConfigVersion(целое число) — профиль совместимости общих библиотек и зависящего от них исходного кода. Если поле отсутствует, sbt-plugin использует профиль 1. Правила выбора профиля приведены ниже.isPublishSrcFolder(логическое значение) — включает публикацию артефактов с исходным кодом решения.env(объект) — произвольные переменные окружения сборки в формате «имя — строковое значение». Если поле отсутствует, используется пустой набор. Модули могут читать эти значения и изменять свое поведение при сборке.
Профиль общих библиотек
commonLibConfigVersion задает набор версий общих библиотек, с которым собирается проект. Каждый профиль рассчитан на определенные версии sbt-plugin и базовых модулей. При смене профиля также могут меняться версия Scala и используемый исходный код.
Профиль |
Назначение |
Основные отличия |
|---|---|---|
1 |
Исходный профиль совместимости |
Используется по умолчанию. Подключает варианты исходного кода |
2 |
Обновленный набор общих библиотек |
Обновляет зависимости sbt-plugin, |
3 |
Переход на Scala 2.13.18 и Jackson 2.22.2 |
Наследует основной набор профиля 2, обновляет Jackson, фиксирует Scala 2.13.18 и подключает исходный код |
Изменяйте профиль только вместе с переходом на согласованный комплект сборки или набор веток sbt-plugin и базовых модулей. Новый номер вводится при общем изменении зависимостей или инструментов сборки, которое требует одновременной адаптации нескольких компонентов. Добавление обычной зависимости одного прикладного модуля не требует нового профиля.
Внимание
Допустимые номера профилей не проверяются строго. Неизвестное значение может выбрать несовместимые ветки зависимостей и исходного кода. На 01.09.2026 Mill-конфигурации базовых модулей различают только профили 1 и 2, поэтому профиль 3 предназначен для согласованной sbt-сборки.
Полный состав профиля отдельно не публикуется. Актуальные версии библиотек проверяются в CommonSetting.scala и GtkSetting.scala репозитория sbt-plugin, а также в build.sbt, package.mill и каталогах *-lib-ver-N базовых модулей.
Комплекты сборки и исходников
Эти параметры определяют, на каком комплекте основан проект, откуда загружается коробочная конфигурация и куда публикуются артефакты и исходный код.
buildKit— комплект, в который публикуются артефакты проекта. Содержит поляnameиversion. Блок требуется для публикации библиотек в комплект сборки. Информация о том, как определяется адрес публикации, приведена в разделе «Конфигурация репозиториев».baseBuildKit— комплект, на котором основан проект. Содержит поляnameиversion. Из него можно получать сервер приложений, sbt-plugin и модули с источникомbase://.baseSourceKit— репозиторий и ветка коробочной конфигурации, используемые как базовый комплект исходников. Содержит поляurlиbranch.mirrorSourceKit— настройки репликации комплекта исходников. ПолеisPublishвключает репликацию,mirrorConfigSourceзадает адрес назначения.
В блоках buildKit и baseBuildKit поле name необходимо для использования указанного комплекта. Поле version необязательно: если версия не указана, используется snapshot. В блоке baseSourceKit для загрузки комплекта исходников необходимы url и branch. В блоке mirrorSourceKit поле mirrorConfigSource необходимо при включенном isPublish; по умолчанию isPublish имеет значение false.
Сервер, sbt-plugin и модули
Эти параметры задают состав проекта и способ подключения его компонентов: из исходного кода или из базового комплекта сборки.
applicationServer— источник и параметры публикации сервера приложений.sbtPlugin— источник и параметры публикации плагина сборки.modules— именованный список прикладных модулей. Если поле отсутствует, используется пустой список.subprojects— именованный список прикладных подпроектов. Находится в режиме Technical Preview.
applicationServer, sbtPlugin и каждый элемент modules или subprojects используют общий набор вложенных полей:
source— источник компонента. HTTP-адрес или отсутствие значения означает подключение исходного кода; значение с префиксомbase, напримерbase://, — подключение артефакта из базового комплекта сборки.branch— ветка репозитория, из которой загружается исходный код.isPublish— включает публикацию компонента при выпуске комплекта. По умолчанию имеет значениеfalse.mirrorSource— адрес репозитория, в который реплицируется исходный код компонента.
Имя каждого элемента modules или subprojects обязательно и является системным именем модуля или подпроекта.