我正在尝试使用以下实例以编程方式编译 Scala 文件Global.Run
:
val settings = new Settings
val reporter = new ConsoleReporter(settings)
val compiler = new Global(settings, reporter)
val run = new compiler.Run // MissingRequirementError
run compile List(path)
不幸的是,我得到一个MissingRequirementError
说法:
找不到编译器镜像中的对象 scala.runtime
所以我的问题是如何使用Run
类以编程方式编译文件,或者我在这里做错了什么?
我试图弄清楚是否可以更改settings
它以使其正常工作。实际上,我需要 Scala 文件中的类列表,path
不一定是完全可运行的输出。因此,如果符号仍未解决(如果我可以运行编译器阶段的一个子集),那会很好。
我也在Writing Scala Compiler Plugins,但如果我可以通过实例化 Compiler Run 对象来运行它,我更喜欢这个解决方案。我还偶然发现了Scala编译器是否可重入?(类似的代码,不同的问题),这让我觉得它可能会按照我的想法工作。
编辑 1:将 Scala JAR 添加到toolcp
(只是带有绝对路径的示例代码!)
根据评论,我将scalac.bat
类路径填充脚本改编为我的 Scala 代码:
// scalac.bat
// if "%_TOOL_CLASSPATH%"=="" (
// for %%f in ("!_SCALA_HOME!\lib\*") do call :add_cpath "%%f"
// for /d %%f in ("!_SCALA_HOME!\lib\*") do call :add_cpath "%%f"
// )
new File("C:\\Program Files\\scala\\lib").listFiles.foreach(f => {
settings.classpath.append(f.getAbsolutePath)
settings.toolcp.append(f.getAbsolutePath)
})