##// END OF EJS Templates
refactor: replace configureAssembly with configureTask
refactor: replace configureAssembly with configureTask

File last commit:

r30:2dd3356774b2 default
r37:3be316021669 default
Show More
variants-plugin.md
110 lines | 3.8 KiB | text/x-minidsrc | MarkdownLexer
/ common / variants-plugin.md
cin
implemented variants model, variants-sources adapter
r26 # Variants Plugin
## NAME
`VariantsPlugin` и extension `variants`.
## SYNOPSIS
```groovy
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
Глобальные логические слои. Служат единым словарем имен, на которые затем
cin
Removed layer links from variants
r30 ссылаются роли.
cin
implemented variants model, variants-sources adapter
r26
### variants
Именованные варианты исполнения/пакетирования (`browser`, `node`, и т.д.).
cin
Removed layer links from variants
r30 Вариант агрегирует роли, атрибуты и artifact slots.
cin
implemented variants model, variants-sources adapter
r26
### roles
Роль описывает набор слоев в пределах варианта (`main`, `test`, `tools`).
Одна роль может ссылаться на несколько слоев.
### attributes
Typed-атрибуты (`Attribute<T> -> Provider<T>`) для передачи параметров в
адаптеры и публикацию артефактов.
### artifact slots
Именованные слоты ожидаемых артефактов варианта. Используются как контракт
между моделью варианта и плагинами, создающими/публикующими результаты.
## VALIDATION
В `finalizeModel()` выполняется проверка:
- роль не может ссылаться на неизвестный layer;
- пустые имена layer запрещены;
cin
Removed layer links from variants
r30 - имена ролей в варианте должны быть уникальны;
- имена artifact slots в варианте должны быть уникальны.
cin
implemented variants model, variants-sources adapter
r26
## LIFECYCLE
- `VariantsPlugin` вызывает `variants.finalizeModel()` на `afterEvaluate`.
cin
Variants mutation guard after finalize
r27 - после `finalizeModel()` мутации модели запрещены.
cin
implemented variants model, variants-sources adapter
r26 - `whenFinalized(...)` replayable.
## API
### BuildVariantsExtension
- `layer(...)` — объявление или конфигурация `BuildLayer`.
- `variant(...)` — объявление или конфигурация `BuildVariant`.
- `layers { ... }`, `variants { ... }` — контейнерный DSL.
- `all(...)` — callback для всех вариантов.
cin
variants API cleanup
r29 - `getAll()`, `find(name)`, `require(name)` — доступ к вариантам.
cin
implemented variants model, variants-sources adapter
r26 - `validate()` — явный запуск валидации.
- `finalizeModel()` — валидация + финализация модели.
- `whenFinalized(...)` — callback по завершенной модели (replayable).
### BuildVariant
- `attributes { ... }` — атрибуты варианта (+ sugar `string/bool/integer`).
- `role(...)`, `roles { ... }` — роли варианта.
- `artifactSlot(...)`, `artifactSlots { ... }` — артефактные слоты.
## KEY CLASSES
- `VariantsPlugin` — точка входа плагина.
- `BuildVariantsExtension` — root extension и lifecycle.
- `BuildVariant` — агрегатная модель варианта.
- `BuildLayer` — модель слоя.
- `BuildRole` — модель роли.
- `BuildArtifactSlot` — модель артефактного слота.
- `VariantAttributes` — typed wrapper для variant attributes.
## NOTES
- Модель `variants` intentionally agnostic к toolchain.
- Интеграция с задачами выполняется через `variantSources` и адаптеры.