2012-09-11 60 views
2

我有一個sbt插件,需要從源文件中獲取編譯器AST。我試圖創建下面的代碼一個新的編譯器:是否有可能在sbt插件中編譯文件?

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]。但我無法弄清楚到底是什麼,我應該發送給它有人可以幫我一下吧

回答

2

這條線是指使用java.class.path系統屬性的值作爲類路徑編譯器:?

settings.usejavacp.value = true 

在sbt中,這隻會包含啓動jar,因爲這是jvm初始化時所有在classpath中的東西。 啓動器jar已經使用ProGuard進行處理,因此它包含不完整的Scala類,不應該在編譯器類路徑中。

相反,明確地根據自己的需要設置類路徑:

settings.classpath.value = "some;classpath" 
+0

是的,我只是想通了:) – Rogach

相關問題