Variants Plugin
NAME
VariantsPlugin и extension variants.
SYNOPSIS
plugins { id 'org.implab.gradle-variants' } variants { layer('mainBase') layer('mainAmd') variant('browser') { attributes { string('jsRuntime', 'browser') string('jsModule', 'amd') } role('main') { layers('mainBase', 'mainAmd') } artifactSlot('mainCompiled') } }
DESCRIPTION
VariantsPlugin задает доменную модель сборки и ее валидацию. Плагин не
регистрирует compile/copy/bundle задачи напрямую.
layers
Глобальные логические слои. Служат единым словарем имен, на которые затем ссылаются роли.
variants
Именованные варианты исполнения/пакетирования (browser, node, и т.д.).
Вариант агрегирует роли, атрибуты и artifact slots.
roles
Роль описывает набор слоев в пределах варианта (main, test, tools).
Одна роль может ссылаться на несколько слоев.
attributes
Typed-атрибуты (Attribute<T> -> Provider<T>) для передачи параметров в
адаптеры и публикацию артефактов.
artifact slots
Именованные слоты ожидаемых артефактов варианта. Используются как контракт между моделью варианта и плагинами, создающими/публикующими результаты.
VALIDATION
В finalizeModel() выполняется проверка:
- роль не может ссылаться на неизвестный layer;
- пустые имена layer запрещены;
- имена ролей в варианте должны быть уникальны;
- имена artifact slots в варианте должны быть уникальны.
LIFECYCLE
VariantsPluginвызываетvariants.finalizeModel()наafterEvaluate.- после
finalizeModel()мутации модели запрещены. whenFinalized(...)replayable.
API
BuildVariantsExtension
layer(...)— объявление или конфигурацияBuildLayer.variant(...)— объявление или конфигурацияBuildVariant.layers { ... },variants { ... }— контейнерный DSL.all(...)— callback для всех вариантов.getAll(),find(name),require(name)— доступ к вариантам.validate()— явный запуск валидации.finalizeModel()— валидация + финализация модели.whenFinalized(...)— callback по завершенной модели (replayable).
BuildVariant
attributes { ... }— атрибуты варианта (+ sugarstring/bool/integer).role(...),roles { ... }— роли варианта.artifactSlot(...),artifactSlots { ... }— артефактные слоты.
KEY CLASSES
VariantsPlugin— точка входа плагина.BuildVariantsExtension— root extension и lifecycle.BuildVariant— агрегатная модель варианта.BuildLayer— модель слоя.BuildRole— модель роли.BuildArtifactSlot— модель артефактного слота.VariantAttributes— typed wrapper для variant attributes.
NOTES
- Модель
variantsintentionally agnostic к toolchain. - Интеграция с задачами выполняется через
variantSourcesи адаптеры.
