Перейти к содержимому

Флаги сборки

Передавайте флаги сборки в Elide через --flag или -f и читайте их в манифесте elide.pkl, чтобы параметризовать сборку, например режимом выпуска или номером версии.

На этой странице

Флаг сборки — это имя с необязательным значением, которое 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.
rawMapping<String, String> действующих значений; флаг без значения отображается в "".
allMapping<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"
      }
    }
  }
}

Была ли эта страница полезной?