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

configuration.mddocs/

Configuration System

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.

Capabilities

Host Configuration

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: ScriptingHostConfiguration

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

Compilation Configuration

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: JvmScriptCompilationConfigurationBuilder

Configuration 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)
    }
}

Evaluation Configuration

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: JvmScriptEvaluationConfigurationBuilder

Configuration 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")
    }
}

Dependency Configuration Extensions

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

Classpath Management

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)

Script Class Resolution

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

docs

caching.md

compiled-scripts.md

configuration.md

dependencies.md

evaluators.md

index.md

utilities.md

tile.json