##// END OF EJS Templates
Rework variant artifacts materialization model...
Rework variant artifacts materialization model Refactor VariantArtifactsPlugin around a live outgoing artifacts context and split artifact publication into explicit internal services: outgoing variant registry, assembly binding, materialization policy hooks, primary-slot convention, and slot assembly handling. Introduce variant artifact slots as identity-first public API and expose materialized assembly handles through ArtifactAssemblies. Add replayable configuration hooks for outgoing configurations, outgoing slots, outgoing variants, and registered assemblies. Create consumable outgoing configurations per variant, bind the primary slot to the root outgoing artifact set, and publish non-primary slots as Gradle outgoing configuration variants. Add deterministic injective task names for slot assembly tasks, use Sync for directory assembly, and configure the default assembly output location under build/variant-assemblies. Make primary-slot selection finalize-on-read and provide a single-slot convention that fails when no unique default can be inferred. Mark artifact internal implementation package as non-public API.
cin -
r51:9db7822cd26c default
Show More
Name Size Modified Last Commit Author
/ common
src
build.gradle Loading ...
readme.md Loading ...
sources-plugin.md Loading ...
variant-artifacts-plugin.md Loading ...
variant-sources-plugin.md Loading ...
variants-plugin.md Loading ...

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