如何从文本文件读取和转换Kotlin DSL定义?

时间:2019-04-09 05:42:35

标签: kotlin

我在静态文本文件中有Kotlin DSL定义,否则用户将在运行时将这些DSL定义作为文本内容提供。如何将这些文本内容动态转换为Kotlin定义?这样该程序就可以理解为DSL对象实例。

1 个答案:

答案 0 :(得分:1)

您可以为此使用Kotlin脚本引擎。

需要以下软件包:

org.jetbrains.kotlin:kotlin-script-util
org.jetbrains.kotlin:kotlin-compiler-embeddable

然后,您必须创建具有以下内容的文件META-INF/services/javax.script.ScriptEngineFactory

org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngineFactory

设置完成后,您可以使用脚本引擎从应用程序内部编译和运行Kotlin脚本,如下面的小示例所示:

with(ScriptEngineManager().getEngineByExtension("kts")) {

    val script =
        """
        "Hello World"
        """.trimIndent()


    val scriptResult = eval(script)

    return scriptResult as String

}

有关如何使用脚本引擎的更多详细信息,请参见Kotlin JSR223 Example

相关问题