Kotlin JVM scripting support library that provides core functionality for executing and evaluating Kotlin scripts on the JVM platform
—
The configuration system provides JVM-specific builders and properties for configuring host environment, compilation settings, and evaluation parameters. It offers type-safe configuration with sensible defaults and extension properties for JVM-specific settings.
Configure the JVM environment for script hosting, including JDK settings and base ClassLoader configuration.
interface JvmScriptingHostConfigurationKeys
open class JvmScriptingHostConfigurationBuilder : PropertiesCollection.Builder {
companion object : JvmScriptingHostConfigurationKeys
}
// Extension property to access JVM host configuration builder
val ScriptingHostConfiguration.Builder.jvm: JvmScriptingHostConfigurationBuilder
// Default configuration instance
val defaultJvmScriptingHostConfiguration: ScriptingHostConfigurationConfiguration Properties:
// JDK home directory property
val ScriptingHostConfiguration.jdkHome: PropertiesCollection.Key<File?>
// Base classloader property with default value
val ScriptingHostConfiguration.baseClassLoader: PropertiesCollection.Key<ClassLoader?>Usage Example:
import kotlin.script.experimental.api.*
import kotlin.script.experimental.jvm.*
val hostConfig = ScriptingHostConfiguration {
jvm {
jdkHome = File("/usr/lib/jvm/java-11-openjdk")
baseClassLoader = Thread.currentThread().contextClassLoader
}
}Configure JVM-specific compilation settings including JDK version, target platform, and dependency resolution.
interface JvmScriptCompilationConfigurationKeys
open class JvmScriptCompilationConfigurationBuilder : PropertiesCollection.Builder {
companion object : JvmScriptCompilationConfigurationKeys
}
// Extension property to access JVM compilation configuration builder
val ScriptCompilationConfiguration.Builder.jvm: JvmScriptCompilationConfigurationBuilderConfiguration Properties:
// JDK home directory for compilation
val ScriptCompilationConfiguration.jdkHome: PropertiesCollection.Key<File?>
// JVM target version (e.g., "1.8", "11", "17")
val ScriptCompilationConfiguration.jvmTarget: PropertiesCollection.Key<String>Usage Example:
val compilationConfig = ScriptCompilationConfiguration {
jvm {
jdkHome = File("/usr/lib/jvm/java-17-openjdk")
jvmTarget = "17"
dependenciesFromCurrentContext(wholeClasspath = true)
}
}Configure script evaluation environment including ClassLoader settings, dependency loading, and execution parameters.
interface JvmScriptEvaluationConfigurationKeys
open class JvmScriptEvaluationConfigurationBuilder : PropertiesCollection.Builder {
companion object : JvmScriptEvaluationConfigurationBuilder()
}
// Extension property to access JVM evaluation configuration builder
val ScriptEvaluationConfiguration.Builder.jvm: JvmScriptEvaluationConfigurationBuilderConfiguration Properties:
// Base classloader for script execution
val ScriptEvaluationConfiguration.baseClassLoader: PropertiesCollection.Key<ClassLoader?>
// Classloader of last snippet (for REPL scenarios)
val ScriptEvaluationConfiguration.lastSnippetClassLoader: PropertiesCollection.Key<ClassLoader?>
// Whether to load dependencies before evaluation (default: true)
val ScriptEvaluationConfiguration.loadDependencies: PropertiesCollection.Key<Boolean>
// Arguments for main method execution
val ScriptEvaluationConfiguration.mainArguments: PropertiesCollection.Key<List<String>?>Usage Example:
val evaluationConfig = ScriptEvaluationConfiguration {
jvm {
baseClassLoader = Thread.currentThread().contextClassLoader
loadDependencies = true
mainArguments = listOf("arg1", "arg2")
}
}Extension functions for configuring dependencies from various sources including current execution context, specific classes, and ClassLoaders.
/**
* Configure dependencies from classes in the current classpath context
*/
fun JvmScriptCompilationConfigurationBuilder.dependenciesFromClassContext(
vararg classes: KClass<*>,
wholeClasspath: Boolean = false
)
/**
* Configure dependencies from current execution context
*/
fun JvmScriptCompilationConfigurationBuilder.dependenciesFromCurrentContext(
wholeClasspath: Boolean = false
)
/**
* Configure dependencies from a specific ClassLoader
*/
fun JvmScriptCompilationConfigurationBuilder.dependenciesFromClassloader(
classLoader: ClassLoader,
wholeClasspath: Boolean = false
)Usage Examples:
// From specific classes
val config1 = ScriptCompilationConfiguration {
jvm {
dependenciesFromClassContext(String::class, List::class)
}
}
// From current context with full classpath
val config2 = ScriptCompilationConfiguration {
jvm {
dependenciesFromCurrentContext(wholeClasspath = true)
}
}
// From specific ClassLoader
val config3 = ScriptCompilationConfiguration {
jvm {
dependenciesFromClassloader(
MyClass::class.java.classLoader,
wholeClasspath = false
)
}
}Utility functions for managing and updating script compilation classpath.
/**
* Create new configuration with updated classpath
*/
fun ScriptCompilationConfiguration.withUpdatedClasspath(
classpath: Collection<File>
): ScriptCompilationConfiguration
/**
* Update classpath in configuration builder
*/
fun ScriptCompilationConfiguration.Builder.updateClasspath(
classpath: Collection<File>?
)
/**
* Update classpath in JVM configuration builder
*/
fun JvmScriptCompilationConfigurationBuilder.updateClasspath(
classpath: Collection<File>?
)Usage Example:
import java.io.File
val originalConfig = ScriptCompilationConfiguration {
jvm {
dependenciesFromCurrentContext()
}
}
val additionalJars = listOf(
File("/path/to/library1.jar"),
File("/path/to/library2.jar")
)
val updatedConfig = originalConfig.withUpdatedClasspath(additionalJars)Configure how scripting classes are resolved and loaded in the JVM environment.
interface GetScriptingClassByClassLoader : GetScriptingClass {
operator fun invoke(
classType: KotlinType,
contextClassLoader: ClassLoader?,
hostConfiguration: ScriptingHostConfiguration
): KClass<*>
}
class JvmGetScriptingClass : GetScriptingClassByClassLoader, Serializable {
override fun invoke(
classType: KotlinType,
contextClass: KClass<*>,
hostConfiguration: ScriptingHostConfiguration
): KClass<*>
override operator fun invoke(
classType: KotlinType,
contextClassLoader: ClassLoader?,
hostConfiguration: ScriptingHostConfiguration
): KClass<*>
}This class resolution system enables proper loading of scripting-related classes in different ClassLoader contexts, essential for modular applications and plugin systems.
Install with Tessl CLI
npx tessl i tessl/maven-org-jetbrains-kotlin--kotlin-scripting-jvm