首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SBT ProGuard插件: OutOfMemoryError,如何增加堆空间?

SBT ProGuard插件: OutOfMemoryError,如何增加堆空间?
EN

Stack Overflow用户
提问于 2013-07-09 15:48:42
回答 2查看 1.6K关注 0票数 8

当尝试使用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",但插件似乎忽略/覆盖了这一点:

代码语言:javascript
复制
> 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插件,或者以其他方式解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2013-07-09 16:01:40

javaOptions in proguard := Seq("-Xmx...")行添加到项目设置中

已更新

好吧,我想我知道你的问题在哪里了。如果在sbt会话中打印以下命令:

代码语言:javascript
复制
show proguard::java-options

它将打印[info] List(-Xmx2G),这意味着在您的前卫中,configuration堆大小设置为2GB,但如果您尝试执行以下命令:show proguard:proguard::java-options,它将显示在proguardTask中使用的[info] List(-Xmx256M)。考虑到这一点,我猜你的项目设置中有类似这样的东西:

代码语言:javascript
复制
 lazy val main = Project(
    id = "project",
    base = file("."),
    settings = Seq(javaOptions in proguard := Seq("-Xmx2G")) ++ proguardSettings)

基本上,proguardSettigns使用默认配置并擦除您的任务设置,因为任务使用的是命令的任务范围。

所以添加下面这一行:

代码语言:javascript
复制
javaOptions in (SbtProguard.Proguard, proguard) := Seq("-Xmx2G")

对于您的设置,它应该类似于以下内容:

代码语言:javascript
复制
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中更简单,只需按以下顺序添加下面这几行:

代码语言:javascript
复制
import com.typesafe.sbt.SbtProguard._
import com.typesafe.sbt.SbtProguard.ProguardKeys.proguard

proguardSettings

javaOptions in (Proguard, proguard) := Seq("-Xmx2G")

保留行之间的顺序和换行

票数 9
EN

Stack Overflow用户

发布于 2014-02-01 01:51:35

使用较新的SBT/sbt-proguard,上面的答案对我不起作用。

使用最新的sbt-proguard插件和SBT0.13.1,我已经能够运行以下内容:

代码语言:javascript
复制
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"))
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17542780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档