2014-06-14 66 views
5

我得到org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':compileScala'試圖用Gradle構建我的Scala項目,如果我用--stacktrace運行Gradle,它看起來像罪魁禍首是java.lang.OutOfMemoryError: PermGen space如何在Gradle下爲Scala編譯增加PermGen空間?

我試圖分叉編譯任務,並將MaxPermSize添加到分叉的JVM參數,但所做的只是將OOME移動到InvocationTargetException後面。

這裏是我的compileScala任務build.gradle塊:

compileScala { 
    options.fork = true 
    options.forkOptions.jvmArgs = ['-XX:MaxPermSize=512m'] 
    scalaCompileOptions.additionalParameters = [ 
     "-feature", 
     "-language:reflectiveCalls", // used for config structural typing 
     "-language:postfixOps" 
    ] 
} 

我知道我可以解決此通過增加全球範圍內使用$JAVA_OPTIONS PermGen的空間,但我更喜歡,我可以與源檢查的解決方案所以沒有人需要在本地定製任何東西來構建項目。

FWIW,我在Mac OS 10.9.3上使用Gradle 1.11和Java 1.6.0_65下的Scala 2.10.3。

回答

5

發現它:儘管ScalaCompile任務具有options屬性,但該屬性未用於Scala編譯;您需要改用scalaCompileOptions。它又有它自己的forkOptions屬性。

compileScala { 
    scalaCompileOptions.fork = true 
    scalaCompileOptions.forkOptions.jvmArgs = ['-XX:MaxPermSize=512m'] 
    scalaCompileOptions.additionalParameters = [ 
     "-feature", 
     "-language:reflectiveCalls", // used for config structural typing 
     "-language:postfixOps" 
    ] 
} 
+2

'ScalaCompile#options'是Scala/Java聯合編譯的Java編譯選項。 'javaOptions'會是一個更好的名字。 –

+0

我想知道是否是這種情況。 –