You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gradle KTS中实例化KTS脚本引擎?遇类加载异常

解决KotlinJsr223DefaultScriptEngine实例化异常问题

问题根源

你遇到的IllegalArgumentException核心原因有两点:

  1. Kotlin版本不匹配:项目使用Kotlin 1.8.21,但scripting相关依赖(如kotlin-scripting-jsr223)用的是1.8.10,版本不一致导致类加载冲突。
  2. 依赖未加入任务类路径:你将scripting依赖放在buildscript的classpath中,但Gradle任务执行时使用的是项目自身的类加载器,无法访问buildscript里的依赖。

解决方案

1. 统一Kotlin版本

将所有Kotlin相关依赖的版本统一为项目使用的1.8.21,避免版本冲突。

2. 调整依赖配置

将scripting相关依赖从buildscript移到项目的dependencies块中,确保任务执行时能访问到这些依赖。

修改后的完整build.gradle.kts

import kotlin.script.experimental.jsr223.KotlinJsr223DefaultScriptEngineFactory

plugins {
    kotlin("jvm") version "1.8.21"
    application
}

repositories {
    mavenCentral()
    google()
}

dependencies {
    testImplementation(kotlin("test"))
    // 添加scripting相关依赖,版本与项目Kotlin一致
    implementation("org.jetbrains.kotlin:kotlin-scripting-jsr223:1.8.21")
    implementation("org.jetbrains.kotlin:kotlin-scripting-common:1.8.21")
    implementation("org.jetbrains.kotlin:kotlin-compiler-embeddable:1.8.21")
    implementation("org.jetbrains.kotlin:kotlin-reflect:1.8.21")
}

abstract class TestProjectTask : DefaultTask() {
    @get: InputFile
    abstract val projectFile: RegularFileProperty

    @TaskAction
    fun execute() {
        try {
            val eng2 = KotlinJsr223DefaultScriptEngineFactory().getScriptEngine()
            println("Project file = ${projectFile.get()} $eng2")
            val worker = Worker()
            worker.doWork(eng2, projectFile.asFile.get().absolutePath)
        } catch (err: Throwable) {
            err.printStackTrace()
        }
    }
}

task("hello2", TestProjectTask::class) {
    projectFile.set(file("./project.kts"))
}

额外说明

  • 如果Worker类依赖这些scripting库,确保它所在的模块也能访问到上述依赖。
  • 若仍存在类加载问题,可尝试为任务显式指定类路径:
    task("hello2", TestProjectTask::class) {
        projectFile.set(file("./project.kts"))
        classpath(sourceSets.main.get().runtimeClasspath)
    }
    

内容的提问来源于stack exchange,提问作者VShcryabets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:27:51