Gradle Common Sources Model
NAME
gradle-common/common — набор плагинов для моделирования вариантов сборки,
регистрации source sets и интеграции этой модели с toolchain-адаптерами.
SYNOPSIS
plugins { id 'org.implab.gradle-variants-sources' } variants { layer('mainBase') layer('mainAmd') variant('browser') { role('main') { layers('mainBase', 'mainAmd') } link('mainBase', 'mainAmd', 'ts:api') } } variantSources { bind('mainBase') { configureSourceSet { declareOutputs('compiled') } } bind('mainAmd').sourceSetNamePattern = '{variant}{layerCap}' whenRegistered { sourceSetName() } whenBound { ctx -> ctx.configureSourceSet { declareOutputs('typings') } } }
DESCRIPTION
Модуль состоит из трех логических частей:
variants— декларативная доменная модель сборки;sources— модель физически регистрируемых source sets;variantSources— адаптер, который связывает первые две модели.
Ниже раскрытие каждой части.
variants
variants задает структуру пространства сборки: какие есть слои, какие роли
используют эти слои в каждом варианте, какие направленные связи между слоями
существуют. Модель не создает задачи и не привязана к TS/JS.
Практический смысл:
- формализовать архитектуру сборки;
- централизовать валидацию связей;
- дать адаптерам единый источник правды.
sources
sources описывает независимые source sets (GenericSourceSet) с именованными
outputs. Это уже "физический" уровень, к которому удобно привязывать задачи,
артефакты и task inputs/outputs.
Практический смысл:
- создать единый контракт по входам/выходам;
- регистрировать результаты задач как outputs source set;
- минимизировать ручные
dependsOnза счет модели outputs.
variantSources
variantSources регистрирует source sets на основе variants, применяет
конфигурацию layer-bindings и отдает события (whenRegistered, whenBound) для
адаптеров других плагинов.
Практический смысл:
- переводить логическую модель
variantsв executable-модельsources; - навешивать политики toolchain на зарегистрированные source sets;
- синхронизировать плагины через replayable callback-контракт.
DOMAIN MODEL
BuildLayer— глобальный идентификатор слоя.BuildVariant— агрегат ролей, связей, атрибутов, артефактных слотов.BuildRole— роль внутри варианта, содержит ссылки на layer names.LayerLink— ориентированная связьfrom -> toв графе определенногоkind.GenericSourceSet— зарегистрированный набор исходников и outputs.BuildLayerBinding— правила registration source set для конкретного layer.SourceSetContext— контекст callback-событий registration.
EVENT CONTRACT
whenRegistered:- событие нового уникального source set name;
- replayable.
whenBound:- событие каждой usage-связки
variant/role/layer; - replayable.
Closure callbacks работают в delegate-first режиме (@DelegatesTo). Для
вложенных closure рекомендуется явный параметр (ctx -> ...).
KEY CLASSES
SourcesPlugin— регистрирует extensionsources.GenericSourceSet— модель источников/outputs для конкретного имени.VariantsPlugin— регистрирует extensionvariantsи lifecycle finalize.BuildVariantsExtension— корневой API модели вариантов.BuildVariant— API ролей, links, attributes и artifact slots варианта.VariantsSourcesPlugin— применяетvariants+sourcesи запускает адаптер.VariantSourcesExtension— API bind/events registration.BuildLayerBinding— слой-конкретный DSL для имени и конфигурации source set.SourceSetContext— payload событий и sugarconfigureSourceSet(...).
NOTES
- Marker ids:
org.implab.gradle-variantsorg.implab.gradle-variants-sourcesSourcesPluginпока class-only (без marker id).
SEE ALSO
sources-plugin.mdvariants-plugin.mdvariant-sources-plugin.md
