2

ソースファイルからコンパイラ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]。しかし、私はそれに何を送るべきかを正確に理解することはできません。誰かがそれを手伝ってくれる?

4

1 に答える 1

2

この行は、java.class.pathシステム プロパティの値をコンパイラのクラスパスとして使用することを意味します。

settings.usejavacp.value = true

sbt では、jvm が初期化されるときにクラスパスにあるのはランチャー jar だけであるため、これにはランチャー jar のみが含まれます。ランチャー jar は ProGuard で処理されているため、不完全な Scala クラスが含まれており、コンパイラーのクラスパスに配置することはできません。

代わりに、必要に応じてクラスパスを明示的に設定します。

settings.classpath.value = "some;classpath"
于 2012-09-12T19:45:36.410 に答える