如何在Gradle下增加Scala编译的PermGen空间?

Dav*_*les 6 scala permgen gradle

我正在org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':compileScala'尝试使用Gradle构建我的Scala项目,如果我运行Gradle,--stacktrace看起来就像罪魁祸首一样java.lang.OutOfMemoryError: PermGen space.

我尝试分配编译任务并添加MaxPermSize到分叉的JVM参数,但所做的只是将OOME移到后面InvocationTargetException.

这是我build.gradlecompileScala任务块:

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

我知道我可以解决此通过使用全球增加PermGen的空间$JAVA_OPTIONS,但我更喜欢我可以这样就没有人需要本地定制任何建设项目与源检查的解决方案.

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

Dav*_*les 6

找到它:即使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"
    ]
}
Run Code Online (Sandbox Code Playgroud)

  • `ScalaCompile#options`是Scala/Java联合编译的Java编译选项.`javaOptions`会是一个更好的名字. (2认同)