Elide включает Kotlin 2.5.0-Beta1. Дистрибутив только со средой выполнения сообщает, что kotlinc нужен полный
дистрибутив.
Компиляция исходных файлов
// Hello.kt
fun main() = println("Hello!")elide kotlinc -- -d out Hello.kt
elide java -- -cp out HelloKtПараметры kotlinc указываются после --, параметры Elide — до него. elide kotlinc --help выводит параметры Elide,
elide kotlinc -- -help — параметры kotlinc.
elide java не добавляет стандартную библиотеку Kotlin, поэтому код, который её вызывает (listOf, joinToString),
там завершается ошибкой:
fun main() = println(listOf("Hello", "Kotlin").joinToString(" "))| Команда | Результат |
|---|---|
elide kotlinc -- -d out Hello., затем elide java -- -cp out HelloKt | NoClassDefFoundError: kotlin/ |
elide kotlinc -- -include-runtime -d hello. | Компиляция завершается ошибкой |
elide run Hello.kt | Hello Kotlin |
elide build с артефактом Jvm.JvmApplication | Скрипт запуска со стандартной библиотекой в lib/ |
Параметры Elide
| Параметр | Назначение |
|---|---|
--incremental | Хранить инкрементальное состояние в . с ключом по выходному пути. |
--incremental-cache-dir DIR | Хранить инкрементальное состояние в DIR. |
--plugins LIST | Включить ровно эти встроенные плагины: metro, serialization, atomicfu, power-assert. |
--metro, --no-metro | Принудительно включить или выключить DI-плагин Metro. |
--tests | Включить тестовые плагины (power-assert). |
--max-errors N | Сколько ошибок показать; 0 показывает все. Предупреждения дедуплицируются и никогда не ограничиваются. |
--report-used-deps PATH | Записать элементы classpath, на которые ссылается результат (strict deps в Bazel). |
--persistent_worker | Работать как постоянный воркер Bazel в режиме singleplex или multiplex. |
--abi-only | Экспериментально: записать в -d только ABI JAR. |
ABI JAR
elide kotlinc --abi-only -- -d header.jar src/**/*.ktJAR содержит публичные и защищённые сигнатуры, @Metadata, значимые для ABI тела inline, значения const и
маркеры аргументов по умолчанию. Неизменённый ABI даёт побайтно идентичный JAR, поэтому правки тел функций сохраняют
зависимые модули в кеше.
ELIDE_KOTLINC_ABI_STRIP=1 пропускает генерацию кода тел. Не задавайте эту переменную, если ABI включает объявления,
сгенерированные плагинами, например $serializer из kotlinx.serialization. Воркеры учитывают её для каждого запроса
отдельно.
Сборка проектов
elide build компилирует наборы исходников Kotlin, найденные по соглашению или объявленные в elide.pkl.
kotlin {
apiLevel = "auto"
languageLevel = "auto"
compilerOptions {
allWarningsAsErrors = true
optIn { "kotlin.time.ExperimentalTime" }
freeCompilerArgs { "-Xcontext-parameters" }
}
}| Свойство | Назначение | По умолчанию |
|---|---|---|
kotlin.apiLevel, kotlin.languageLevel | "1.9" … "2.5", "latest" или "stable". | "auto" |
compilerOptions.optIn | Маркеры, передаваемые как -opt-in. | нет |
compilerOptions., .extraWarnings, .allWarningsAsErrors, .suppressWarnings, .verbose | Соответствующие переключатели kotlinc. | false |
compilerOptions. | Дополнительные аргументы компилятора. | нет |
compilerOptions., .languageVersion, .jvmTarget | Версии для отдельной компиляции; "auto" следует проекту. | "auto" |
compilerOptions. | Генерировать метаданные параметров для рефлексии Java. | false |
compilerOptions. | "ERROR", "WARNING" или "IGNORE" при несовпадении целевых версий Kotlin и Java. | "ERROR" |
compilerOptions., .noJdk | Убрать стандартную библиотеку или JDK из classpath. | false |
compilerOptions. | Не поддерживается: true приводит к ошибке компиляции Kotlin. Упаковывайте с помощью артефакта Jvm.JvmApplication. | false |
compilerOptions. | Инкрементальные сборки проекта. | true |
Каждая компиляция записывает свои аргументы в kotlinc.args рядом с результатом.
Плагины и функции
kotlin.features | Действие | По умолчанию |
|---|---|---|
kotlinx | Библиотеки KotlinX в корнях зависимостей Kotlin. | true |
defaultPlugins | Набор встроенных плагинов. | true |
serialization | Плагин и среда выполнения kotlinx.serialization. | kotlinx && defaultPlugins |
coroutines | Среда выполнения kotlinx.coroutines. | kotlinx |
atomicfu | Плагин и среда выполнения kotlinx.atomicfu. | kotlinx && defaultPlugins |
powerAssert | Плагин Power Assert. | defaultPlugins |
metro | DI-плагин Metro. | defaultPlugins |
reflection | Неявный kotlin-reflect. | true |
testing | Тестовые библиотеки Kotlin в тестовых наборах. | true |
kotlin {
features {
metro = false
}
plugins {
["org.jetbrains.kotlinx.serialization"] {
["mode"] = "json"
}
}
}
dependencies {
maven {
kotlinPlugins { "com.example:my-compiler-plugin:1.0.0" }
}
}- Каждая запись
pluginsпревращается в-P plugin:<id>:<key>=<value>, с сортировкой по id и ключу. - Сторонние плагины указываются в группе
kotlinPluginsи требуютManagedKotlinToolchainилиCustomKotlinToolchain. Встроенный компилятор выдаёт предупреждениеCustom Kotlin compiler plugins are not supported when using the embedded compiler, plugins will not be appliedи компилирует без них. - Встроенный плагин, которого нет в дистрибутиве, пропускается вместе с его параметрами, с предупреждением.
- Неявные библиотеки Kotlin добавляются только в корни зависимостей с исходниками на Kotlin.
reflection = falseубираетkotlin-reflect;compilerOptions.noStdlib = trueубирает его и стандартную библиотеку. Объявленные зависимости остаются. project("core").friend()открываетinternal-объявления соседнего проекта; см. Рабочие пространства.- Набор исходников видит
internal-объявления наборов, от которых он зависит в том же проекте: каждого набора, указанного в егоdependsOn(mainдля тестового набора, где он не указан), а также наборов, от которых зависят они.
Выбор инструментария
import "elide:Kotlin.pkl" as Kotlin
kotlin {
toolchain = "embedded" // the default
// toolchain = new Kotlin.ManagedKotlinToolchain { version = "2.4.0" }
// toolchain = new Kotlin.CustomKotlinToolchain { path = "/opt/kotlinc" }
}| Инструментарий | Поведение |
|---|---|
"embedded" | Kotlin, входящий в Elide. |
ManagedKotlinToolchain | Загружает указанную версию (включая предварительные) с её стандартной библиотекой, reflect, тестовыми библиотеками и плагинами Kotlin. Версии KotlinX, Metro и других сторонних компонентов не меняются; проверьте, что они совместимы. |
CustomKotlinToolchain | Локальный дистрибутив Kotlin; отсутствующие в нём встроенные плагины пропускаются. |
Инструментарий применяется к сборкам проектов; elide kotlinc всегда использует встроенный компилятор.
KAPT и KSP не поддерживаются. Код на Kotlin, использующий сгенерированные типы Java, должен получать их из вышестоящего набора исходников или проекта.
Примеры
Начните с шаблона:
elide init --template ktjvm # Kotlin app with a test