Elide intègre Kotlin 2.5.0-Beta1. Une distribution limitée à l’exécution signale que kotlinc nécessite la
distribution complète.
Compiler des fichiers source
// Hello.kt
fun main() = println("Hello!")elide kotlinc -- -d out Hello.kt
elide java -- -cp out HelloKtLes options de kotlinc se placent après -- ; celles d’Elide, avant. elide kotlinc --help liste celles d’Elide,
elide kotlinc -- -help celles de kotlinc.
elide java n’ajoute pas la bibliothèque standard Kotlin : le code qui l’appelle (listOf, joinToString) y échoue
donc :
fun main() = println(listOf("Hello", "Kotlin").joinToString(" "))| Commande | Résultat |
|---|---|
elide kotlinc -- -d out Hello. puis elide java -- -cp out HelloKt | NoClassDefFoundError: kotlin/ |
elide kotlinc -- -include-runtime -d hello. | Échec de la compilation |
elide run Hello.kt | Hello Kotlin |
elide build avec un artefact Jvm.JvmApplication | Script de démarrage avec la bibliothèque standard dans lib/ |
Options d’Elide
| Option | Rôle |
|---|---|
--incremental | Conserver l’état incrémental dans ., indexé par chemin de sortie. |
--incremental-cache-dir DIR | Stocker l’état incrémental dans DIR. |
--plugins LIST | Activer exactement ces plugins intégrés : metro, serialization, atomicfu, power-assert. |
--metro, --no-metro | Forcer l’activation ou la désactivation du plugin d’injection de dépendances Metro. |
--tests | Activer les plugins de test (power-assert). |
--max-errors N | Erreurs affichées ; 0 les affiche toutes. Les avertissements sont dédupliqués et jamais limités. |
--report-used-deps PATH | Écrire les entrées du classpath référencées par la sortie (strict deps de Bazel). |
--persistent_worker | S’exécuter comme worker persistant Bazel, en singleplex ou multiplex. |
--abi-only | Expérimental : n’écrire qu’un JAR d’ABI dans -d. |
JAR d’ABI
elide kotlinc --abi-only -- -d header.jar src/**/*.ktLe JAR contient les signatures publiques et protégées, @Metadata, les corps inline pertinents pour l’ABI, les
valeurs const et les marqueurs d’arguments par défaut. Une ABI inchangée produit un JAR identique octet pour octet :
les modifications de corps laissent donc les dépendants en cache.
ELIDE_KOTLINC_ABI_STRIP=1 saute la génération de code des corps. Laissez-la non définie quand l’ABI inclut des
déclarations générées par des plugins, comme le $serializer de kotlinx.serialization. Les workers l’acceptent par
requête.
Construire des projets
elide build compile les source sets Kotlin trouvés par convention ou déclarés dans elide.pkl.
kotlin {
apiLevel = "auto"
languageLevel = "auto"
compilerOptions {
allWarningsAsErrors = true
optIn { "kotlin.time.ExperimentalTime" }
freeCompilerArgs { "-Xcontext-parameters" }
}
}| Propriété | Signification | Valeur par défaut |
|---|---|---|
kotlin.apiLevel, kotlin.languageLevel | "1.9" … "2.5", "latest" ou "stable". | "auto" |
compilerOptions.optIn | Marqueurs passés via -opt-in. | aucun |
compilerOptions., .extraWarnings, .allWarningsAsErrors, .suppressWarnings, .verbose | Les options kotlinc correspondantes. | false |
compilerOptions. | Arguments supplémentaires du compilateur. | aucun |
compilerOptions., .languageVersion, .jvmTarget | Versions par compilation ; "auto" suit le projet. | "auto" |
compilerOptions. | Émettre les métadonnées de paramètres pour la réflexion Java. | false |
compilerOptions. | "ERROR", "WARNING" ou "IGNORE" en cas d’écart entre les cibles Kotlin et Java. | "ERROR" |
compilerOptions., .noJdk | Retirer la bibliothèque standard ou le JDK du classpath. | false |
compilerOptions. | Non pris en charge : true fait échouer la compilation Kotlin. Empaquetez avec un artefact Jvm.JvmApplication. | false |
compilerOptions. | Builds de projet incrémentaux. | true |
Chaque compilation écrit ses arguments dans kotlinc.args, à côté de sa sortie.
Plugins et fonctionnalités
kotlin.features | Effet | Valeur par défaut |
|---|---|---|
kotlinx | Bibliothèques KotlinX sur les racines de dépendances Kotlin. | true |
defaultPlugins | Suite de plugins intégrés. | true |
serialization | Plugin et runtime kotlinx.serialization. | kotlinx && defaultPlugins |
coroutines | Runtime kotlinx.coroutines. | kotlinx |
atomicfu | Plugin et runtime kotlinx.atomicfu. | kotlinx && defaultPlugins |
powerAssert | Plugin Power Assert. | defaultPlugins |
metro | Plugin d’injection de dépendances Metro. | defaultPlugins |
reflection | kotlin-reflect implicite. | true |
testing | Bibliothèques de test Kotlin sur les source sets de test. | true |
kotlin {
features {
metro = false
}
plugins {
["org.jetbrains.kotlinx.serialization"] {
["mode"] = "json"
}
}
}
dependencies {
maven {
kotlinPlugins { "com.example:my-compiler-plugin:1.0.0" }
}
}- Chaque entrée de
pluginsdevient-P plugin:<id>:<key>=<value>, triée par identifiant puis par clé. - Les plugins tiers vont dans le groupe
kotlinPluginset nécessitent unManagedKotlinToolchainou unCustomKotlinToolchain. Le compilateur intégré avertitCustom Kotlin compiler plugins are not supported when using the embedded compiler, plugins will not be appliedet compile sans eux. - Un plugin intégré absent de la distribution est ignoré, avec ses options, et un avertissement est émis.
- Les bibliothèques Kotlin implicites ne vont qu’aux racines de dépendances qui contiennent des sources Kotlin.
reflection = falseretirekotlin-reflect;compilerOptions.noStdlib = truele retire ainsi que la bibliothèque standard. Les dépendances déclarées sont conservées. project("core").friend()expose les déclarationsinternald’un projet voisin ; voir Espaces de travail.- Un source set voit les déclarations
internaldes source sets dont il dépend dans le même projet : chaque source set nommé dans sondependsOn(mainpour un source set de test qui l’omet), ainsi que ceux dont ces derniers dépendent.
Choisir une chaîne d’outils
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" }
}| Chaîne d’outils | Comportement |
|---|---|
"embedded" | Le Kotlin intégré à Elide. |
ManagedKotlinToolchain | Télécharge cette version (préversions comprises) avec sa bibliothèque standard, reflect, ses bibliothèques de test et ses plugins Kotlin. Les versions de KotlinX, de Metro et des autres composants tiers ne changent pas ; vérifiez qu’elles correspondent. |
CustomKotlinToolchain | Une distribution Kotlin locale ; les plugins intégrés qui lui manquent sont ignorés. |
La chaîne d’outils s’applique aux builds de projet ; elide kotlinc utilise toujours le compilateur intégré.
KAPT et KSP ne sont pas pris en charge. Le code Kotlin qui utilise des types Java générés doit les obtenir d’un source set ou d’un projet en amont.
Exemples
Partez d’un modèle :
elide init --template ktjvm # Kotlin app with a test