Kotlin JVM scripting support library that provides core functionality for executing and evaluating Kotlin scripts on the JVM platform
npx @tessl/cli install tessl/maven-org-jetbrains-kotlin--kotlin-scripting-jvm@2.2.0Kotlin Scripting JVM provides comprehensive JVM-specific implementation of Kotlin's scripting framework. It enables embedding Kotlin scripting capabilities into applications with support for REPL evaluation, script compilation, runtime execution, dependency management, and classpath handling for JVM-based scripting environments.
implementation("org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.0")import kotlin.script.experimental.jvm.*
import kotlin.script.experimental.jvm.util.*For specific functionality:
// Configuration
import kotlin.script.experimental.jvm.JvmScriptingHostConfigurationBuilder
import kotlin.script.experimental.jvm.JvmScriptCompilationConfigurationBuilder
import kotlin.script.experimental.jvm.JvmScriptEvaluationConfigurationBuilder
// Evaluators
import kotlin.script.experimental.jvm.BasicJvmScriptEvaluator
import kotlin.script.experimental.jvm.BasicJvmReplEvaluator
// Dependencies
import kotlin.script.experimental.jvm.JvmDependency
import kotlin.script.experimental.jvm.JvmDependencyFromClassLoader
// Compiled Scripts
import kotlin.script.experimental.jvm.impl.KJvmCompiledScriptimport kotlin.script.experimental.api.*
import kotlin.script.experimental.jvm.*
import kotlin.script.experimental.host.toScriptSource
// Basic script evaluation
val evaluator = BasicJvmScriptEvaluator()
val source = "println(\"Hello, World!\")".toScriptSource()
// Configure compilation
val compilationConfig = ScriptCompilationConfiguration {
jvm {
dependenciesFromCurrentContext(wholeClasspath = true)
}
}
// Configure evaluation
val evaluationConfig = ScriptEvaluationConfiguration {
jvm {
baseClassLoader(Thread.currentThread().contextClassLoader)
}
}
// Compile and evaluate script
val compiledScript = /* compile with your compiler */
val result = evaluator(compiledScript, evaluationConfig)The kotlin-scripting-jvm library is organized around several key components:
JVM-specific configuration builders and properties for host environment, compilation settings, and evaluation parameters. Provides type-safe configuration with sensible defaults.
interface JvmScriptingHostConfigurationKeys
open class JvmScriptingHostConfigurationBuilder : PropertiesCollection.Builder
interface JvmScriptCompilationConfigurationKeys
open class JvmScriptCompilationConfigurationBuilder : PropertiesCollection.Builder
interface JvmScriptEvaluationConfigurationKeys
open class JvmScriptEvaluationConfigurationBuilder : PropertiesCollection.BuilderJVM classpath dependency handling including direct file dependencies, ClassLoader-based dependencies, and automatic classpath detection from context.
data class JvmDependency(val classpath: List<File>) : ScriptDependency
class JvmDependencyFromClassLoader(
val classLoaderGetter: ClassLoaderByConfiguration
) : ScriptDependency
typealias ClassLoaderByConfiguration = (ScriptCompilationConfiguration) -> ClassLoaderScript evaluation engines supporting both standalone script execution and REPL (Read-Eval-Print Loop) scenarios with proper error handling and diagnostics.
open class BasicJvmScriptEvaluator : ScriptEvaluator {
suspend operator fun invoke(
compiledScript: CompiledScript,
scriptEvaluationConfiguration: ScriptEvaluationConfiguration
): ResultWithDiagnostics<EvaluationResult>
}
class BasicJvmReplEvaluator(
val scriptEvaluator: ScriptEvaluator = BasicJvmScriptEvaluator()
) : ReplEvaluator<CompiledSnippet, KJvmEvaluatedSnippet>JVM implementations of compiled scripts with serialization support, module management, and ClassLoader creation capabilities.
open class KJvmCompiledScript : CompiledScript, Serializable {
override val sourceLocationId: String?
override val compilationConfiguration: ScriptCompilationConfiguration
val scriptClassFQName: String
override val resultField: Pair<String, KotlinType>?
override suspend fun getClass(
scriptEvaluationConfiguration: ScriptEvaluationConfiguration?
): ResultWithDiagnostics<KClass<*>>
}
interface KJvmCompiledModule {
fun createClassLoader(baseClassLoader: ClassLoader?): ClassLoader
}Comprehensive utilities for classpath extraction, ClassLoader management, source code position tracking, error reporting, and JVM-specific operations.
object KotlinJars {
val compilerClasspath: List<File>
val stdlib: File
val scriptRuntime: File
val kotlinScriptStandardJars: List<File>
fun getLib(
propertyName: String,
jarName: String,
markerClass: KClass<*>,
classLoader: ClassLoader? = null
): File?
}Script compilation caching interface with configurable cache implementations for improved performance in repeated script execution scenarios.
interface CompiledJvmScriptsCache {
fun get(
script: SourceCode,
scriptCompilationConfiguration: ScriptCompilationConfiguration
): CompiledScript?
fun store(
compiledScript: CompiledScript,
script: SourceCode,
scriptCompilationConfiguration: ScriptCompilationConfiguration
)
object NoCache : CompiledJvmScriptsCache
}// Property keys for JVM-specific configuration
val ScriptingHostConfiguration.jdkHome: PropertiesCollection.Key<File?>
val ScriptingHostConfiguration.baseClassLoader: PropertiesCollection.Key<ClassLoader?>
val ScriptCompilationConfiguration.jdkHome: PropertiesCollection.Key<File?>
val ScriptCompilationConfiguration.jvmTarget: PropertiesCollection.Key<String>
val ScriptEvaluationConfiguration.baseClassLoader: PropertiesCollection.Key<ClassLoader?>
val ScriptEvaluationConfiguration.lastSnippetClassLoader: PropertiesCollection.Key<ClassLoader?>
val ScriptEvaluationConfiguration.loadDependencies: PropertiesCollection.Key<Boolean>
val ScriptEvaluationConfiguration.mainArguments: PropertiesCollection.Key<List<String>?>class KJvmEvaluatedSnippet(
compiledSnippet: CompiledSnippet,
configuration: ScriptEvaluationConfiguration,
result: ResultValue
) : EvaluatedSnippet {
override val compiledSnippet: CompiledScript
override val configuration: ScriptEvaluationConfiguration
override val result: ResultValue
}data class AbsSourceCodePosition(
val line: Int,
val col: Int,
val absolutePos: Int
) : Serializable
open class SnippetsHistory<CompiledT, ResultT>(
startingHistory: CompiledHistoryList<CompiledT, ResultT> = emptyList()
) : Serializable {
val items: List<CompiledHistoryItem<CompiledT, ResultT>>
fun add(line: CompiledT, value: ResultT)
fun lastItem(): CompiledHistoryItem<CompiledT, ResultT>?
fun lastValue(): ResultT?
fun isEmpty(): Boolean
fun isNotEmpty(): Boolean
}
typealias CompiledHistoryItem<CompiledT, ResultT> = Pair<CompiledT, ResultT>class ClasspathExtractionException(message: String) : Exception