Java 使用依赖项评估kotlin脚本文件
问题:如何在运行时执行一组kotlin文件,并从中返回一个Java 使用依赖项评估kotlin脚本文件,java,kotlin,kotlin-script,Java,Kotlin,Kotlin Script,问题:如何在运行时执行一组kotlin文件,并从中返回一个kts文件的结果 我编写了一个系统,它能够执行带有指令的kts文件。目前,它支持以下执行模式: main.kts-将执行此文件。它应该返回List 但是,用户可以将任何其他文件放在同一文件夹中。例如,文件夹可以包含以下文件: main.kts Constants.kt//它有一些常量 Helpers.kt//一些附加方法 具有计算代码的方法,但它只有一个输入文件 问题:如何让ScriptEngine将类编译成类路径,但只执行其中一个
kts
文件的结果
我编写了一个系统,它能够执行带有指令的kts
文件。目前,它支持以下执行模式:
main.kts
-将执行此文件。它应该返回List
但是,用户可以将任何其他文件放在同一文件夹中。例如,文件夹可以包含以下文件:
main.kts
//它有一些常量Constants.kt
//一些附加方法Helpers.kt
//这里有安全问题
val classLoader=Thread.currentThread().contextClassLoader
val engineManager=ScriptEngineManager(类加载器)
setIdeaIoUseFallback()
val ktsEngine:ScriptEngine=engineManager.getEngineeByExtension(“kts”)
/**
*这里有一个问题:如果file1需要file2编译,那么下面的执行就会失败。
*
*正确的方法:找到编译整个文件夹并计算单个文件的解决方案。
*/
filesFromFolderExceptMain.forEach{
ktsEngine.eval(it)
}
将ktsEngine.eval(mainScriptFile)作为列表返回
另一种解决方案(可能导致不可预测的编译波动):
val context=filesFromFolderExceptMain.joinToString(System.lineSeparator())
ktsEngine.eval(上下文)
将ktsEngine.eval(mainScriptFile)作为列表返回
所以,问题:如何在运行时执行一组kotlin文件并从中返回一个
kts
文件的结果?您应该做的是将@file:Import(“Constants.kt”、“Helpers.kt”)
添加到主脚本中(请参阅)。虽然我不确定它是相对于脚本所在的目录还是相对于工作目录
如果您不希望用户必须这样做,您可以将它们传入。您应该做的是将
@file:Import(“Constants.kt”、“Helpers.kt”)
添加到主脚本(请参阅)。尽管我不确定它是相对于脚本所在的目录还是相对于工作目录
如果你不想让用户这么做,你可以把他们传进来