如何在Scala IDE中使用Scala编译器插件

4

注意:这是在Scala-IDE邮件列表上发布相同问题的完全重复,经过5天没有回复后我放弃了等待。

我正在编写一个Scala编译器插件。目前它被称为scalawrapper(但我以后可能会找到更好的名字)。我已经安装了Typesafe Stack,并将我的插件放在其中:

C:\Program Files\typesafe-stack\misc\scala-devel\plugins

现在我可以这样调用scalac:
scalac -classpath ... -Xplugin-require:scalawrapper test\...

它会自动查找并使用我的插件。

不幸的是,我无法让Scala-IDE使用它。我总是得到“缺少必需的插件:scalawrapper”错误提示。在“项目属性\Scala编译器(使用项目设置)\高级”选项卡中,我已经在Xplugin-require字段中输入了scalawrapper,并且这有效,因为我收到了错误提示。但是,我无法在Xpluginsdir中输入任何内容来产生影响。

我已经尝试了上面给出的绝对路径,尝试了正斜杠和反斜杠,尝试了没有空格的临时目录,尝试了相对于项目目录,尝试了相对于工作区。它就是无法使用任何东西。我还应该注意到,这不仅仅是针对我的插件,因为我以前曾尝试在Scala-IDE的旧版本中使用ScalaCL插件,也因为完全相同的原因而失败。

我刚刚更新了今天(2011年10月15日),所以应该拥有最新版本(似乎我终于可以明确设置缩进为4个空格,但也许我之前只是忽略了这个设置)。

有人能告诉我它实际上期望什么,当我没有在Xpluginsdir中放置任何内容时使用的默认值是什么吗?

1个回答

3
Scala IDE使用演示编译器,而不是您安装的编译器。要在Scala IDE中使用插件,您需要在Eclipse首选项中指定它。
尝试选择“Windows->Preferences->Scala->Compiler”。请参见高级选项卡。路径相对于工作区。
编辑:当我说相对于工作区时,我的意思是存储.metadata文件夹下实际工作区目录($workspace_loc)。我有一个项目,其中包括源代码的项目文件存储在一个目录中,而工作区则存储在其他位置,即$project_loc(c:\code\project\source)与$workspace_loc(c:\code\project\workspace)不同。您在编译器参数中指定的目录相对于工作区($workspace_loc)。
要查看是否具有类似的设置,请转到项目并选择“属性->资源->链接资源”。
我在$workspace_loc下创建了一个名为plugin的目录,并将jar文件放置在其中。在“Windows->Preferences->Scala->Compiler”高级选项卡中,我有
Xplugin = C:\code\project\workspace\plugin\xxx-0.0.1.jar
Xplugin-require = xxx

请注意,您也可以在项目属性中指定插件,但它仍然使用$workspace_loc。上述配置对我有效。

你没有读懂我的问题。我知道设置在哪里:“在“项目属性\Scala编译器(使用项目设置)\高级”选项卡中,”唯一的问题是,它不起作用。 - Sebastien Diot
抱歉,我确实阅读了您的问题,但是我的意思没有表达清楚。我已经编辑了答案。 - Matthew Farwell
谢谢。如果我按照你说的做,似乎可以工作。我认为之前我认为它没有工作的原因是Eclipse会丢弃所有输出(包括System.out和log(...)),所以看起来好像什么都没发生。在Eclipse中,产生输出的相同选项对scalac无效。我不得不抛出异常来证明它的工作原理,但这是一个不同的问题,需要在另一个问题中解决。你有没有找到如何使用Xpluginsdir而不必显式指定jar的方法? - Sebastien Diot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接