##// END OF EJS Templates
WIP variant artifacts DSL, FilePaths traits
WIP variant artifacts DSL, FilePaths traits

File last commit:

r38:87d6128f0bc8 default
r50:ca3982e55d9e default
Show More
readme.md
134 lines | 5.1 KiB | text/x-minidsrc | MarkdownLexer

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') }
    }
}

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 задает структуру пространства сборки: какие есть слои, какие роли используют эти слои в каждом варианте, какие есть атрибуты и artifact slots. Модель не создает задачи и не привязана к 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 — canonical identity-model объявленного слоя.
  • BuildVariant — агрегат ролей, атрибутов, артефактных слотов.
  • BuildRole — роль внутри варианта, содержит ссылки на declared layer names.
  • GenericSourceSet — зарегистрированный набор исходников и outputs.
  • LayerBindingSpec — публичный DSL-contract adapter policy/callbacks для слоя.
  • SourceSetRegistration — payload события регистрации source set.
  • SourceSetUsageBinding — payload события usage-binding.

EVENT CONTRACT

  • whenRegistered:
  • событие нового уникального source set name;
  • replayable.
  • whenBound:
  • событие каждой usage-связки variant/role/layer;
  • replayable.

Closure callbacks работают в delegate-first режиме (@DelegatesTo). Для вложенных closure рекомендуется явный параметр (ctx -> ...).

KEY CLASSES

  • SourcesPlugin — регистрирует extension sources.
  • GenericSourceSet — модель источников/outputs для конкретного имени.
  • VariantsPlugin — регистрирует extension variants и lifecycle finalize.
  • BuildVariantsExtension — корневой API модели вариантов.
  • BuildVariant — API ролей, attributes и artifact slots варианта.
  • VariantsSourcesPlugin — применяет variants + sources и запускает адаптер.
  • VariantSourcesExtension — API bind/events registration.
  • LayerBindingSpec — слой-конкретный DSL для policy/configuration source set.
  • SourceSetRegistration — payload whenRegistered(...).
  • SourceSetUsageBinding — payload whenBound(...).

NOTES

  • Marker ids:
  • org.implab.gradle-variants
  • org.implab.gradle-variants-sources
  • SourcesPlugin пока class-only (без marker id).

SEE ALSO

  • sources-plugin.md
  • variants-plugin.md
  • variant-sources-plugin.md