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

如何在编译过程中编译带有未捕获异常的play scala项目时增加堆栈大小:java.lang.StackOverflowerError,scala,playframework,Scala,Playframework,当使用eclipse编译play2.1 scala项目时,我得到的错误是 [错误]编译期间未捕获异常:java.lang.StackOverflower错误 [错误](编译:编译)java.lang.StackOverflower错误 我试图通过添加以下行在application.conf中配置编译器: memory=-Xmx5g-Xms5g-xs8192m (我的程序也需要很多堆空间,所以我还添加了xmx和xms) 但是它不起作用 如何解决此问题?您的异常可能是由于编译器中的错误,而不是堆栈大

当使用eclipse编译play2.1 scala项目时,我得到的错误是

[错误]编译期间未捕获异常:java.lang.StackOverflower错误

[错误](编译:编译)java.lang.StackOverflower错误

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

memory=-Xmx5g-Xms5g-xs8192m

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

但是它不起作用


如何解决此问题?

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

奇怪的是,您的堆栈溢出。它看起来确实像一只虫子。但是,如果确实没有足够的堆栈空间,那么修改application.conf对您没有帮助。这些设置控制应用程序的运行时参数,而问题在于编译

这个答案显示了如何调整SBT的JVM参数:

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

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


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

当我将所有内容移回较旧的版本时,现在一切正常:scala 2.9.1或2.9.2一切正常,编译时没有堆栈溢出;play版本是2.0.4。

实际上,一次播放需要8 GB的堆栈大小!应用程序?你有一TB的内存吗?没有,我只有64G内存。我使用8g进行测试,因为我对堆栈溢出问题非常恼火。
[error] uncaught exception during compilation:java.lang.StackOverflowError

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