2012-02-28 69 views
1

在建設(要麼編譯或測試:編譯),我得到這個錯誤:的StackOverflowError而在SBT的編譯

[info] [specializing CorrelationDal.scala] 
[error] {file:/home/bamboo/.../}batch/compile:compile: java.lang.StackOverflowError 
[error] Total time: 20 s, completed Feb 28, 2012 7:32:08 AM 

正如你所知道的,我給自己定的scalacOption的「-verbose」選項鍵。

我決定嘗試給編譯過程中使用較大的堆棧大小:

​​

但是,什麼也沒有改變。

我試着檢查我對CorrelationDal.scala所做的更改,並做了一些嘗試來放鬆推理的數量(明確指出類型,刪除鏈接創建的iterables等),但我可以如果沒有內部對Scala編譯器的理解,我們無法確切知道哪些是罪魁禍首。

有沒有人有任何線索,如何找到問題的核心?

+0

您是否嘗試手動編譯?你能隔離觸發堆棧溢出的編譯單元的源代碼部分嗎? – Madoc 2012-02-28 14:53:02

+0

我正在努力。更令人難以置信的是,本地(在我的MacOSX Lion機器上)它工作得很好,但在Amazon Elastic實例上失敗。 – 2012-02-28 14:57:49

回答

2

原來這是字符串串聯的問題。如果連接了太多的字符串,如下所示:

"string" + "other string" + variable + "string" + ... 

您會得到這個。我認爲這是因爲編譯器中的類型推理機制太努力了。希望它將在未來版本中得到修復(我正在使用2.9.1 ...)

+0

這個序列,無論如何,開始於一個變量?這對我來說很有意義。無論如何,我假設你沒有對這些變量調用'.toString',而且它們本身不是'String'。我希望看到一個例子 - 這可能值得進一步調查。 – 2012-03-01 15:41:05

+0

它不以一個變量開始,並且將所有不是字符串的變量放在'.toString'中並沒有什麼區別。 – 2012-03-06 09:11:50

+1

在這種情況下,我會打開一張可以提供最小范例的票。它可能會被關閉,因爲不會修復,但將這些東西記錄下來是有用的,而且可能不會。斯卡拉2.10是最有可能有字符串插值,這將是沒有意義的。 – 2012-03-06 13:30:56

1

該參數沒有意義 - 您沒有運行,只是編譯。

您必須更改SBT自身的堆棧大小。只需編輯sbt腳本並更改它。

+0

試過了,它也沒有工作。但仍然 - 編譯器不會分叉,並且javaOptions也不會被髮送到它? – 2012-02-28 14:58:46

+0

@OmervanKloeten不會發生分叉,通過查看'inspect java-options'顯示的反向依賴關係,可以看出它除了'runner'外沒有其他用途。現在,即使4G還不夠,也許你已經創建了一個無限類型推理循環。 – 2012-02-28 17:16:46

+0

感謝您的提示 - 我會刪除這些行。仍然檢查源代碼,但我無法找到什麼病毒編譯器只是尚未...任何建議? – 2012-02-29 06:49:21

6

在sbt腳本文件中添加-Xss2M之後,就可以了。