CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-jetbrains-kotlin--kotlin-scripting-jvm

Kotlin JVM scripting support library that provides core functionality for executing and evaluating Kotlin scripts on the JVM platform

Pending
Overview
Eval results
Files

Kotlin Scripting JVM

Kotlin 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.

Package Information

  • Package Name: org.jetbrains.kotlin:kotlin-scripting-jvm
  • Package Type: maven
  • Language: Kotlin
  • Installation:
    implementation("org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.0")

Core Imports

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.KJvmCompiledScript

Basic Usage

import 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)

Architecture

The kotlin-scripting-jvm library is organized around several key components:

  • Configuration System: Builders for host, compilation, and evaluation settings with JVM-specific extensions
  • Dependency Management: Classpath handling and ClassLoader resolution for script execution
  • Script Evaluators: Both standalone and REPL script execution engines
  • Compiled Script Representation: Serializable script containers with module support and metadata
  • Utility Functions: Classpath extraction, ClassLoader management, source code handling, and diagnostics
  • Compatibility Layer: Legacy scripting API support and diagnostic mapping

Capabilities

Configuration System

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.Builder

Configuration System

Dependency Management

JVM 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) -> ClassLoader

Dependency Management

Script Evaluators

Script 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>

Script Evaluators

Compiled Scripts and Modules

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
}

Compiled Scripts

Utility Functions

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?
}

Utility Functions

Caching System

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
}

Caching System

Types

Core Configuration Types

// 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>?>

Evaluation Result Types

class KJvmEvaluatedSnippet(
    compiledSnippet: CompiledSnippet,
    configuration: ScriptEvaluationConfiguration,
    result: ResultValue
) : EvaluatedSnippet {
    override val compiledSnippet: CompiledScript
    override val configuration: ScriptEvaluationConfiguration  
    override val result: ResultValue
}

Utility Types

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>

Exception Types

class ClasspathExtractionException(message: String) : Exception

Install with Tessl CLI

npx tessl i tessl/maven-org-jetbrains-kotlin--kotlin-scripting-jvm
Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.jetbrains.kotlin/kotlin-scripting-jvm@2.2.x