'How do I execute kotlin scripts in Spring Boot applications?

I want to run some DSL scripts in Spring Boot applications. I have intended to use Kotlin to write DSL. But I don't know how to perform Kotlin scripts.

This is code:

public class ScriptExecutor {
    public static void main(String[] args) throws ScriptException {
        ScriptEngineManager engineManager = new ScriptEngineManager();
        ScriptEngine engine = engineManager.getEngineByExtension("kts");
        engine.eval("println(\"Hello Kotlin!\")");
    }
}

And I used ojdkbuild8 1.8.0.322-1.b06.

Refer to this link link1 , I added these dependencies:

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72"
    implementation "org.jetbrains.kotlin:kotlin-script-runtime:1.3.72"
    implementation "org.jetbrains.kotlin:kotlin-script-util:1.3.72"
    implementation "org.jetbrains.kotlin:kotlin-compiler-embeddable:1.3.72"
    implementation "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.3.72"
    implementation "org.jetbrains.kotlin:kotlin-scripting-jvm-host-embeddable:1.3.72"
    implementation "org.jetbrains.kotlin:kotlin-scripting-jvm-host:1.3.72"
    implementation "org.jetbrains.kotlin:kotlin-scripting-jvm:1.3.72"
    implementation "org.jetbrains.kotlin:kotlin-scripting-jsr223-embeddable:1.3.72"
    implementation "org.jetbrains.kotlin:kotlin-scripting-jsr223:1.3.72"

But I got the following error:

Exception in thread "main" java.lang.NoSuchMethodError: kotlin.script.experimental.util.PropertiesCollection$Companion.keyCopy(Lkotlin/script/experimental/util/PropertiesCollection$Key;)Lkotlin/script/experimental/util/PropertiesCollection$PropertyKeyCopyDelegate;
    at kotlin.script.experimental.jvm.JvmScriptCompilationKt.<clinit>(jvmScriptCompilation.kt:96)
    at kotlin.script.experimental.jsr223.KotlinJsr223DefaultScriptEngineFactory$getScriptEngine$1.invoke(KotlinJsr223DefaultScriptEngineFactory.kt:59)
    at kotlin.script.experimental.jsr223.KotlinJsr223DefaultScriptEngineFactory$getScriptEngine$1.invoke(KotlinJsr223DefaultScriptEngineFactory.kt:32)
    at kotlin.script.experimental.api.ScriptCompilationConfiguration.<init>(scriptCompilation.kt:22)
    at kotlin.script.experimental.api.ScriptCompilationConfiguration.<init>(scriptCompilation.kt:27)
    at kotlin.script.experimental.jsr223.KotlinJsr223DefaultScriptEngineFactory.getScriptEngine(KotlinJsr223DefaultScriptEngineFactory.kt:58)
    at javax.script.ScriptEngineManager.getEngineByExtension(ScriptEngineManager.java:288)

So I refer to another document to simplify dependence.link2:

    implementation 'org.jetbrains.kotlin:kotlin-script-util:1.3.72'
    implementation 'org.jetbrains.kotlin:kotlin-compiler-embeddable:1.3.72'
    implementation 'org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.3.72'

But I get NPE error.In ScriptEngine engine = engineManager.getEngineByExtension("kts"),engine is null.

Back to DSL's question, I don't even know if using Kotlin is right, will Groovy a better choice?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source