在Scala编译器插件中加载本机库

时间:2012-07-02 12:19:51

标签: scala dll eclipse-plugin scala-ide scalac

我正在开发一个scala编译器插件。编译器插件在“重新检查”阶段之后运行。它分析了AST(抽象语法树) 并生成一些输出。在这个插件中,我使用System.loadLibrary

加载本机库“scalaz3.dll”

我计划在Eclipse Scala IDE中使用编译器插件。我在ScalaIde首选项中设置了-XPlugin参数。 当我在Eclipse中编译scala源文件时,在refchecks阶段之后调用插件并正常工作(生成所需的输出)

但是,当我对源文件进行更改并进行编译时,我收到以下错误。

The SBT builder crashed while compiling your project. 
Native Library scalaz3.dll already loaded in another classloader.

看起来ScalaIDE会生成另一个类加载器,并尝试在同一进程中加载​​插件类。

我在编译器插件测试用例中遇到了同样的问题。但是,我使用fork in Test := true中的build.sbt修复了它。 但我对如何在eclipse scala IDE中修复它一无所知。

这里有一些相关的帖子(尽管与eclipse scala ide无关):

1 个答案:

答案 0 :(得分:1)

IDE在进程中使用Sbt,因此没有等效的分叉。难道你只能加载一次dll,例如将它加载到object的构造函数中吗?

建议使用此技术here