当尝试使用sbt-proguard插件为我的项目组装jar时,我总是得到一个Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
我尝试为sbt增加堆空间,但结果是proguard插件产生了它自己的java进程,并且硬编码了-Xmx256M参数。我不知道如何改变它,除了改变proguard代码本身。
我在JDK 7上使用sbt-proguard插件0.2.1和sbt 0.12.3和Scala 2.10.1
我尝试了设置javaOptions in proguard := Seq("-Xmx2G")和javaOptions in proguard += "-Xmx2G",但插件似乎忽略/覆盖了这一点:
> ps aux|grep java
kaeser 47084 105.1 1.1 2927540 94440 s000 R+ 10:07AM 0:05.52 /usr/bin/java -Xmx256M -cp /Users/kaeser/.ivy2/cache/net.sf.proguard/proguard-base/jars/proguard-base-4.9.jar proguard.ProGuard -include /Users/kaeser/Documents/workspace/pipeline-runner/target/scala-2.10/proguard/configuration.pro
kaeser 45087 0.0 6.3 5312012 531028 s000 S+ 6:03PM 1:24.88 /usr/bin/java -Xmx2G -Xms512M -Xmx2G -Xss1M -XX:MaxPermSize=512m -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -Xshare:off -jar /usr/local/Cellar/sbt/0.12.3/libexec/sbt-launch.jar我如何将Java选项传递给proguard插件,或者以其他方式解决这个问题?
发布于 2013-07-09 16:01:40
将javaOptions in proguard := Seq("-Xmx...")行添加到项目设置中
已更新
好吧,我想我知道你的问题在哪里了。如果在sbt会话中打印以下命令:
show proguard::java-options它将打印[info] List(-Xmx2G),这意味着在您的前卫中,configuration堆大小设置为2GB,但如果您尝试执行以下命令:show proguard:proguard::java-options,它将显示在proguardTask中使用的[info] List(-Xmx256M)。考虑到这一点,我猜你的项目设置中有类似这样的东西:
lazy val main = Project(
id = "project",
base = file("."),
settings = Seq(javaOptions in proguard := Seq("-Xmx2G")) ++ proguardSettings)基本上,proguardSettigns使用默认配置并擦除您的任务设置,因为任务使用的是命令的任务范围。
所以添加下面这一行:
javaOptions in (SbtProguard.Proguard, proguard) := Seq("-Xmx2G")对于您的设置,它应该类似于以下内容:
lazy val main = Project(
id = "project",
base = file("."),
settings = proguardSettings ++ Seq(
javaOptions in (SbtProguard.Proguard, proguard) := Seq("-Xmx2G")
)现在调用show proguard:proguard::java-options,它将显示[info] List(-Xmx2G)。您还可以为会话打开全局日志记录,并查看是否一切正常:set logLevel in Global := Level.Debug
更新
我更喜欢Build.scala文件,但在*.sbt中更简单,只需按以下顺序添加下面这几行:
import com.typesafe.sbt.SbtProguard._
import com.typesafe.sbt.SbtProguard.ProguardKeys.proguard
proguardSettings
javaOptions in (Proguard, proguard) := Seq("-Xmx2G")保留行之间的顺序和换行
发布于 2014-02-01 01:51:35
使用较新的SBT/sbt-proguard,上面的答案对我不起作用。
使用最新的sbt-proguard插件和SBT0.13.1,我已经能够运行以下内容:
name := "project"
organization := "scott.andy"
version := "0.0.0"
scalacOptions := Seq("-deprecation", "-unchecked")
proguardSettings
ProguardKeys.options in Proguard ++= Seq("-dontnote", "-dontwarn", "-ignorewarnings")
ProguardKeys.options in Proguard += ProguardOptions.keepMain("scott.andy.project.Main")
inConfig(Proguard)(javaOptions in ProguardKeys.proguard := Seq("-Xmx2g"))https://stackoverflow.com/questions/17542780
复制相似问题