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 (persistent worker) у режимі 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