Elide incluye Kotlin 2.5.0-Beta1. Una distribución solo de ejecución indica que kotlinc necesita la distribución
completa.
Compilar archivos fuente
// Hello.kt
fun main() = println("Hello!")elide kotlinc -- -d out Hello.kt
elide java -- -cp out HelloKtLas opciones de kotlinc van después de --; las de Elide, antes. elide kotlinc --help lista las de Elide;
elide kotlinc -- -help, las de kotlinc.
elide java no añade la biblioteca estándar de Kotlin, así que el código que la usa (listOf, joinToString) falla
ahí:
fun main() = println(listOf("Hello", "Kotlin").joinToString(" "))| Comando | Resultado |
|---|---|
elide kotlinc -- -d out Hello. y después elide java -- -cp out HelloKt | NoClassDefFoundError: kotlin/ |
elide kotlinc -- -include-runtime -d hello. | La compilación falla |
elide run Hello.kt | Hello Kotlin |
elide build con un artefacto Jvm.JvmApplication | Script de inicio con la biblioteca estándar en lib/ |
Opciones de Elide
| Opción | Propósito |
|---|---|
--incremental | Guardar el estado incremental en ., indexado por la ruta de salida. |
--incremental-cache-dir DIR | Guardar el estado incremental en DIR. |
--plugins LIST | Habilitar exactamente estos plugins integrados: metro, serialization, atomicfu, power-assert. |
--metro, --no-metro | Forzar la activación o desactivación del plugin de DI Metro. |
--tests | Habilitar los plugins de pruebas (power-assert). |
--max-errors N | Errores que se muestran; 0 los muestra todos. Las advertencias se deduplican y nunca se limitan. |
--report-used-deps PATH | Escribir las entradas del classpath a las que hace referencia la salida (strict deps de Bazel). |
--persistent_worker | Ejecutarse como worker persistente de Bazel, en modo singleplex o multiplex. |
--abi-only | Experimental: escribir solo un JAR de ABI en -d. |
JAR de ABI
elide kotlinc --abi-only -- -d header.jar src/**/*.ktEl JAR contiene las firmas públicas y protegidas, @Metadata, los cuerpos inline relevantes para la ABI, los valores
const y los marcadores de argumentos predeterminados. Una ABI sin cambios produce un JAR idéntico byte a byte, así que
los cambios en los cuerpos mantienen en caché a los dependientes.
ELIDE_KOTLINC_ABI_STRIP=1 omite la generación de código de los cuerpos. Déjela sin definir cuando la ABI incluya
declaraciones generadas por plugins, como el $serializer de kotlinx.serialization. Los workers la aceptan por
solicitud.
Compilar proyectos
elide build compila los conjuntos de fuentes de Kotlin encontrados por convención o declarados en elide.pkl.
kotlin {
apiLevel = "auto"
languageLevel = "auto"
compilerOptions {
allWarningsAsErrors = true
optIn { "kotlin.time.ExperimentalTime" }
freeCompilerArgs { "-Xcontext-parameters" }
}
}| Propiedad | Significado | Valor predeterminado |
|---|---|---|
kotlin.apiLevel, kotlin.languageLevel | "1.9" … "2.5", "latest" o "stable". | "auto" |
compilerOptions.optIn | Marcadores que se pasan como -opt-in. | ninguno |
compilerOptions., .extraWarnings, .allWarningsAsErrors, .suppressWarnings, .verbose | Las opciones correspondientes de kotlinc. | false |
compilerOptions. | Argumentos adicionales del compilador. | ninguno |
compilerOptions., .languageVersion, .jvmTarget | Versiones por compilación; "auto" sigue al proyecto. | "auto" |
compilerOptions. | Emitir metadatos de parámetros para la reflexión de Java. | false |
compilerOptions. | "ERROR", "WARNING" o "IGNORE" ante una discrepancia entre los destinos de Kotlin y Java. | "ERROR" |
compilerOptions., .noJdk | Quitar la biblioteca estándar o el JDK del classpath. | false |
compilerOptions. | No compatible: true hace fallar la compilación de Kotlin. Empaquete con un artefacto Jvm.JvmApplication. | false |
compilerOptions. | Compilaciones incrementales del proyecto. | true |
Cada compilación escribe sus argumentos en kotlinc.args, junto a su salida.
Plugins y funciones
kotlin.features | Efecto | Valor predeterminado |
|---|---|---|
kotlinx | Bibliotecas KotlinX en las raíces de dependencias de Kotlin. | true |
defaultPlugins | Conjunto de plugins integrados. | true |
serialization | Plugin y runtime de kotlinx.serialization. | kotlinx && defaultPlugins |
coroutines | Runtime de kotlinx.coroutines. | kotlinx |
atomicfu | Plugin y runtime de kotlinx.atomicfu. | kotlinx && defaultPlugins |
powerAssert | Plugin Power Assert. | defaultPlugins |
metro | Plugin de DI Metro. | defaultPlugins |
reflection | kotlin-reflect implícito. | true |
testing | Bibliotecas de pruebas de Kotlin en los conjuntos de pruebas. | true |
kotlin {
features {
metro = false
}
plugins {
["org.jetbrains.kotlinx.serialization"] {
["mode"] = "json"
}
}
}
dependencies {
maven {
kotlinPlugins { "com.example:my-compiler-plugin:1.0.0" }
}
}- Cada entrada de
pluginsse convierte en-P plugin:<id>:<key>=<value>, en orden de id y clave. - Los plugins de terceros van en el grupo
kotlinPluginsy necesitan unManagedKotlinToolchaino unCustomKotlinToolchain. El compilador integrado avisa conCustom Kotlin compiler plugins are not supported when using the embedded compiler, plugins will not be appliedy compila sin ellos. - Un plugin integrado que falta en la distribución se omite, junto con sus opciones, con una advertencia.
- Las bibliotecas implícitas de Kotlin solo se añaden a las raíces de dependencias con fuentes Kotlin.
reflection = falsequitakotlin-reflect;compilerOptions.noStdlib = truequita esa biblioteca y la estándar. Las dependencias declaradas se mantienen. project("core").friend()expone las declaracionesinternalde un proyecto hermano; consulte Espacios de trabajo.- Un conjunto de fuentes ve las declaraciones
internalde los conjuntos de los que depende en el mismo proyecto: todos los nombrados en sudependsOn(mainpara un conjunto de pruebas que lo omite), junto con los conjuntos de los que estos dependen.
Elegir una cadena de herramientas
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" }
}| Cadena de herramientas | Comportamiento |
|---|---|
"embedded" | El Kotlin incluido en Elide. |
ManagedKotlinToolchain | Descarga esa versión (también las preliminares) con su biblioteca estándar, reflect, bibliotecas de pruebas y plugins de Kotlin. Las versiones de KotlinX, Metro y otros terceros no cambian; compruebe que coincidan. |
CustomKotlinToolchain | Una distribución local de Kotlin; se omiten los plugins integrados que le falten. |
La cadena de herramientas se aplica a las compilaciones de proyectos; elide kotlinc usa siempre el compilador
incluido.
KAPT y KSP no son compatibles. El código Kotlin que usa tipos Java generados debe obtenerlos de un conjunto de fuentes o proyecto anterior.
Ejemplos
Empiece desde una plantilla:
elide init --template ktjvm # Kotlin app with a test