我在scala中遇到了一些非常恼人的问题。问题是,我可以完美地编译小型scala项目,但是当项目更大时,编译器会因StackOverflowException而崩溃。显然,我必须增加编译器的堆栈大小,然而,这可能是我在这里的主要问题,我不知道如何。
我用这些参数启动netbeans:
netbeans_default_options="-J-client -J-Xmx512m -J-Xss8m -J-Xms512m -J-XX:PermSize=128m -J-XX:MaxPermSize=512m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true"
因此,据我所知,-J-Xss8m应该将线程堆栈大小增加到8 mb。然而,这似乎并不影响编译器。因此,我尝试使用可以在netbeans中设置的编译器标志,将相同的参数直接传递给编译器,结果如下:
-deprecation -J-Xss8m
但是,同样,这没有帮助,我仍然得到异常。我搜索了netbeans文档,但是我只找到了我已经设置好的netbeans启动参数。我希望这里有人能给我进一步的信息,告诉我如何处理这个问题。
进一步的信息:所以,一天之后,我终于有机会在不同的机器上尝试所有的东西。我使用了相同的设置和相同的编译器,但令我惊讶的是,我没有得到相同的结果。也就是说,在他的机器上,编译器编译了所有的代码,没有任何例外。我的电脑和他的电脑唯一的区别是,他的电脑有更多的内存和CPU能力,但这应该不会使交易,因为我们都使用netbeans与相同的启动选项。
到目前为止,我甚至尝试了2.9 scala编译器的RC,它没有多大帮助。此外,我检查了我是否安装了正确的scala插件,因为在使用2.8插件和2.9编译器时可能会出现问题,反之亦然。但是,我正在使用2.9插件和2.9编译器,所以这很好。给Scala编译器更多的堆栈空间的问题类似于指定更多的堆空间。在运行Scala编译器时,必须将这两个选项指定为自定义JVM参数。然而Netbeans缺乏任何关于如何做到这一点的文档,所以在这里。
使用Netbeans为Scala编译器指定自定义JVM参数的方法是为每个项目自定义build.xml。
- 在项目文件夹中打开nbproject/build-impl.xml
- 搜索"scalac",您将找到以下目标:-init-macrodef-scalac.
- 复制整个目标定义,将其粘贴到build.xml中,并保存。
- 关闭nbproject/build-impl.xml,从现在开始你将使用build.xml。
- 在您刚刚复制的目标中,找到
标记,嵌套将如下所示:target.macrodef. sequence .scalac - 为scalac标签添加一个自定义的"jvmargs"属性,它看起来如下:保存build.xml。现在,每当你用netbeans编译你的项目时,编译器将使用自定义的jvm参数运行。