Флаг сборки — это имя с необязательным значением, которое elide.pkl читает при вычислении.
Передача флагов
elide build run --args="Hello World 🌎" --flag=RELEASE --flag=VERSION=1.2.3
elide build run --args="Hello World 🌎" -fRELEASE -fVERSION=1.2.3--flag NAME и -f NAME тоже работают, в любой позиции. Аргументы после -- никогда не считаются флагами.
--args относится к задаче run; см. Задачи сборки.
Флаги принимает каждая команда, работающая с проектом:
elide run -fRELEASE -fVERSION=1.2.3 -- "Hello World 🌎"
elide install --flag=RELEASE
elide format -fNO_KOTLIN
elide build -fRELEASE
elide test -fFAST
elide project export -fRELEASE # shows the evaluated result- Флаг без значения (
-fRELEASE) даётtrueдляbool(...)и ошибку дляstring(...). - Значение — всё после первого
=, как есть:-fEXPR=a=bдаётa=b. - Повторённый флаг сохраняет каждое значение; скалярные методы читают последнее (Повторяющиеся флаги).
- Флаги не нужно объявлять; неизвестное имя считается отсутствующим.
- Имена не могут быть пустыми и не могут содержать
,или=.
Чтение флагов в elide.pkl
amends "elide:project.pkl"
local isRelease = build.flags.bool("RELEASE")
name = if (isRelease) "demo-release" else "demo-debug"
version = build.flags.stringOr("VERSION", "0.0.0")| Метод | Возвращает |
|---|---|
has(name) | Был ли передан флаг, со значением или без. |
count(name) | Сколько раз передан; 0, если отсутствует. |
string(name) | Значение; null, если отсутствует; ошибка, если без значения. |
stringOr(name, orElse) | Значение или orElse, если отсутствует. |
bool(name) | false, если отсутствует, true, если без значения; true/false, yes/no, on/off, 1/0 (в любом регистре); иначе ошибка. |
int(name) | Значение как Int; null, если отсутствует; ошибка, если не целое число. |
strings(name) | Все значения по порядку; пусто, если отсутствует; ошибка при вхождении без значения. |
stringsOr(name, orElse) | Все значения или orElse, если отсутствует. |
ints(name) | Все значения как Int; пусто, если отсутствует; ошибка, если какое-то не целое число. |
bools(name) | Все значения как Boolean; пусто, если отсутствует; вхождение без значения читается как true. |
raw | Mapping<String, String> действующих значений; флаг без значения отображается в "". |
all | Mapping<String, List<String>> всех значений. |
Используйте strings(...), чтобы принимать одно или несколько значений. Типизированные методы завершаются ошибкой при
некорректном вводе:
–– Pkl Error ––
build flag `RELEASE` is not a boolean: `perhaps`Переменные окружения
read("env:NAME") видит только PATH, HOME, USER, LANG, LC_*, TZ, CI, TERM, SHELL, OS, TMPDIR и
ELIDE_*; любая другая переменная читается как отсутствующая. Используйте флаг сборки или разрешите больше:
elide build --allow-env=GITHUB_SHA,JAVA_HOME
elide build --allow-env # every variableПовторяющиеся флаги
elide build -fARG=one -fARG=two -fARG='three, and a half'local args = build.flags.strings("ARG") // List("one", "two", "three, and a half")
local first = build.flags.all["ARG"].first
local latest = build.flags.string("ARG") // "three, and a half" — scalars read the last valueЗначения сохраняют запятые, пробелы, = и Unicode. Методы для списков проверяют каждый элемент:
–– Pkl Error ––
build flag `N` is not an integer: `x1`Флаги во вложенных блоках
Внутри тела вложенного объекта build без уточнения не разрешается. Привяжите local на уровне модуля или используйте
module.build.flags:
local wantsExtra = build.flags.bool("EXTRA")
dependencies {
maven {
packages {
"com.google.guava:guava:33.0.0-jre"
when (wantsExtra) {
"com.example:extra:1.0.0"
}
when (module.build.flags.bool("MORE")) {
"com.example:more:1.0.0"
}
}
}
}