【问题标题】:Is it possible to compile files in sbt plugin?是否可以在 sbt 插件中编译文件?
【发布时间】:2012-09-04 17:21:04
【问题描述】:

我有一个 sbt 插件,它需要从源文件中获取编译器 AST。我尝试使用以下代码创建一个新的编译器:

val settings = new Settings
settings.usejavacp.value = true
val compiler = new tools.nsc.interactive.Global(settings, new StoreReporter())

但我收到以下错误:

java.lang.Error: typeConstructor inapplicable for <none>

它似乎在某种程度上与 sbt 的内部编译器发生冲突。

那么,有没有办法从 sbt 中获取这些文件的 AST?

或者也许可以直接从 sbt 的编译器中获取它们? (这样会更好,因为我不需要每次都重新编译所有内容)

编辑:

似乎使用 tools.nsc.Global 而不是“交互式”不会引发错误,但我不知道如何从中获取 AST。

编辑:

好吧,当我尝试编译一些文件时,tools.nsc.Global 失败并出现同样的错误:(

SBT FAQ 声明我应该在初始化我的编译器时使用一些“代表性类型” - settings.embeddedDefaults[MyType]。但我无法确切地知道我应该发送给它什么。有人可以帮我吗?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    这行表示使用java.class.path系统属性的值作为编译器的类路径:

    settings.usejavacp.value = true
    

    在 sbt 中,这只会包含启动器 jar,因为这是初始化 jvm 时类路径上的全部内容。 启动器 jar 已使用 ProGuard 处理,因此它包含不完整的 Scala 类,并且永远不应位于编译器类路径中。

    相反,根据您的需要明确设置类路径:

    settings.classpath.value = "some;classpath"
    

    【讨论】:

    • 是的,我刚刚想通了 :)
    猜你喜欢
    • 2013-05-30
    • 2021-05-22
    • 2014-11-27
    • 2011-07-14
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多