在编译期间编译带有未捕获异常的play scala项目时如何增加堆栈大小:java.lang.StackOverflowError

时间:2013-04-04 05:07:12

标签: scala playframework

使用eclipse编译play2.1 scala项目时,我收到错误

  编译期间

[error]未捕获的异常:java.lang.StackOverflowError

     

[error](编译:编译)java.lang.StackOverflowError

我尝试通过添加以下行来在application.conf中配置编译器:

  

jvm.memory = -Xmx5g -Xms5g -Xss8192M

(我的程序还需要很多堆空间,所以我还添加了xmx和xms)

但它不起作用..

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

你得到一个StackOverflow很奇怪。它看起来像一个bug。但是,如果确实没有足够的堆栈空间,修改application.conf将无法帮助您。这些设置控制应用程序的运行时参数,而您的问题是在编译时。

这个SO答案显示了如何调整SBT的JVM参数: Out of Memory Error Using SBT When Executing Lift Project

在您的情况下,您将修改播放分发文件夹中的播放文件,并在其中添加特定于堆栈的选项(播放实用程序只是一个自定义的sbt版本)。

答案 1 :(得分:2)

您的异常可能是由于编译器中的错误,而不是堆栈大小不足。

答案 2 :(得分:1)

[error] uncaught exception during compilation:java.lang.StackOverflowError

[error] (compile:compile)java.lang.StackOverflowError

他们看起来像是来自代码中的错误。仔细检查那里的问题。通常的SBT问题是或java.lang.OutOfMemoryError: PermGen space,在这种情况下使用@Marius Danila的答案来解决问题。

最好的办法是对您的方法进行单元测试。 Play会使用JUnitSelenium。看看here并仔细检查单元测试的逻辑。

答案 3 :(得分:0)

现在可以工作了,当我将所有东西都移回旧版本时:scala 2.9.1或2.9.2一切正常,编译时没有堆栈溢出;播放版本是2.0.4。