Elide enthält Kotlin 2.5.0-Beta1. Eine reine Laufzeit-Distribution meldet, dass kotlinc die vollständige
Distribution benötigt.
Quelldateien kompilieren
// Hello.kt
fun main() = println("Hello!")elide kotlinc -- -d out Hello.kt
elide java -- -cp out HelloKtkotlinc-Optionen folgen nach --, Elide-Optionen stehen davor. elide kotlinc --help listet die von Elide auf,
elide kotlinc -- -help die von kotlinc.
elide java fügt die Kotlin-Standardbibliothek nicht hinzu, daher schlägt Code, der sie aufruft (listOf,
joinToString), dort fehl:
fun main() = println(listOf("Hello", "Kotlin").joinToString(" "))| Befehl | Ergebnis |
|---|---|
elide kotlinc -- -d out Hello., dann elide java -- -cp out HelloKt | NoClassDefFoundError: kotlin/ |
elide kotlinc -- -include-runtime -d hello. | Kompilierung schlägt fehl |
elide run Hello.kt | Hello Kotlin |
elide build mit einem Jvm.JvmApplication-Artefakt | Startskript mit der Standardbibliothek in lib/ |
Elide-Optionen
| Option | Zweck |
|---|---|
--incremental | Inkrementellen Zustand in . halten, nach Ausgabepfad geschlüsselt. |
--incremental-cache-dir DIR | Inkrementellen Zustand in DIR speichern. |
--plugins LIST | Genau diese integrierten Plugins aktivieren: metro, serialization, atomicfu, power-assert. |
--metro, --no-metro | Das Metro-DI-Plugin erzwingen oder abschalten. |
--tests | Die Test-Plugins aktivieren (power-assert). |
--max-errors N | Angezeigte Fehler; 0 zeigt alle. Warnungen werden dedupliziert und nie begrenzt. |
--report-used-deps PATH | Die Classpath-Einträge schreiben, auf die die Ausgabe verweist (Bazel Strict Deps). |
--persistent_worker | Als persistenter Bazel-Worker laufen, Singleplex oder Multiplex. |
--abi-only | Experimentell: nur ein ABI-JAR nach -d schreiben. |
ABI-JARs
elide kotlinc --abi-only -- -d header.jar src/**/*.ktDas JAR enthält öffentliche und geschützte Signaturen, @Metadata, ABI-relevante inline-Rümpfe, const-Werte und
Markierungen für Standardargumente. Eine unveränderte ABI ergibt ein byteidentisches JAR, sodass Änderungen an Rümpfen
abhängige Module im Cache belassen.
ELIDE_KOTLINC_ABI_STRIP=1 überspringt die Codegenerierung für Rümpfe. Lassen Sie die Variable ungesetzt, wenn die ABI
von Plugins generierte Deklarationen enthält, etwa $serializer von kotlinx.serialization. Worker akzeptieren sie pro
Anfrage.
Projekte bauen
elide build kompiliert Kotlin-Source-Sets, die per Konvention gefunden oder in elide.pkl deklariert werden.
kotlin {
apiLevel = "auto"
languageLevel = "auto"
compilerOptions {
allWarningsAsErrors = true
optIn { "kotlin.time.ExperimentalTime" }
freeCompilerArgs { "-Xcontext-parameters" }
}
}| Eigenschaft | Bedeutung | Standard |
|---|---|---|
kotlin.apiLevel, kotlin.languageLevel | "1.9" … "2.5", "latest" oder "stable". | "auto" |
compilerOptions.optIn | Marker, die als -opt-in übergeben werden. | keine |
compilerOptions., .extraWarnings, .allWarningsAsErrors, .suppressWarnings, .verbose | Die entsprechenden kotlinc-Schalter. | false |
compilerOptions. | Zusätzliche Compiler-Argumente. | keine |
compilerOptions., .languageVersion, .jvmTarget | Versionen pro Kompilierung; "auto" folgt dem Projekt. | "auto" |
compilerOptions. | Parameter-Metadaten für Java-Reflection erzeugen. | false |
compilerOptions. | "ERROR", "WARNING" oder "IGNORE" bei abweichendem Kotlin- und Java-Ziel. | "ERROR" |
compilerOptions., .noJdk | Standardbibliothek oder JDK aus dem Classpath entfernen. | false |
compilerOptions. | Nicht unterstützt: true lässt die Kotlin-Kompilierung fehlschlagen. Paketieren Sie mit einem Jvm.JvmApplication-Artefakt. | false |
compilerOptions. | Inkrementelle Projekt-Builds. | true |
Jede Kompilierung schreibt ihre Argumente in kotlinc.args neben ihrer Ausgabe.
Plugins und Features
kotlin.features | Wirkung | Standard |
|---|---|---|
kotlinx | KotlinX-Bibliotheken in Kotlin-Abhängigkeitswurzeln. | true |
defaultPlugins | Integrierte Plugin-Suite. | true |
serialization | Plugin und Laufzeitbibliothek von kotlinx.serialization. | kotlinx && defaultPlugins |
coroutines | Laufzeitbibliothek von kotlinx.coroutines. | kotlinx |
atomicfu | Plugin und Laufzeitbibliothek von kotlinx.atomicfu. | kotlinx && defaultPlugins |
powerAssert | Power-Assert-Plugin. | defaultPlugins |
metro | Metro-DI-Plugin. | defaultPlugins |
reflection | Implizites kotlin-reflect. | true |
testing | Kotlin-Testbibliotheken in Test-Sets. | true |
kotlin {
features {
metro = false
}
plugins {
["org.jetbrains.kotlinx.serialization"] {
["mode"] = "json"
}
}
}
dependencies {
maven {
kotlinPlugins { "com.example:my-compiler-plugin:1.0.0" }
}
}- Jeder Eintrag in
pluginswird zu-P plugin:<id>:<key>=<value>, sortiert nach ID und Schlüssel. - Plugins von Drittanbietern kommen in den Bucket
kotlinPluginsund benötigen eineManagedKotlinToolchainoderCustomKotlinToolchain. Der eingebettete Compiler warnt mitCustom Kotlin compiler plugins are not supported when using the embedded compiler, plugins will not be appliedund kompiliert ohne sie. - Ein integriertes Plugin, das in der Distribution fehlt, wird samt seinen Optionen übersprungen, mit einer Warnung.
- Implizite Kotlin-Bibliotheken gehen nur an Abhängigkeitswurzeln mit Kotlin-Quellen.
reflection = falseentferntkotlin-reflect;compilerOptions.noStdlib = trueentfernt es und die Standardbibliothek. Deklarierte Abhängigkeiten bleiben erhalten. project("core").friend()macht dieinternal-Deklarationen eines Geschwisterprojekts sichtbar; siehe Workspaces.- Ein Source-Set sieht die
internal-Deklarationen der Sets, von denen es im selben Projekt abhängt: jedes in seinemdependsOngenannte Set (mainfür ein Test-Set, das es weglässt) sowie die Sets, von denen diese abhängen.
Werkzeugkette wählen
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" }
}| Werkzeugkette | Verhalten |
|---|---|
"embedded" | Das mit Elide gebündelte Kotlin. |
ManagedKotlinToolchain | Lädt diese Version (auch Vorabversionen) mit ihrer Standardbibliothek, reflect, Testbibliotheken und Kotlin-Plugins herunter. Versionen von KotlinX, Metro und anderen Drittanbietern bleiben unverändert; prüfen Sie, ob sie passen. |
CustomKotlinToolchain | Eine lokale Kotlin-Distribution; integrierte Plugins, die ihr fehlen, werden übersprungen. |
Die Werkzeugkette gilt für Projekt-Builds; elide kotlinc verwendet immer den gebündelten Compiler.
KAPT und KSP werden nicht unterstützt. Kotlin-Code, der generierte Java-Typen verwendet, muss sie aus einem vorgelagerten Source-Set oder Projekt beziehen.
Beispiele
Beginnen Sie mit einer Vorlage:
elide init --template ktjvm # Kotlin app with a test