2013-07-09 44 views
4

當試圖組裝我與SBT-proguard的插件項目的JAR,我總是得到一個Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceSBT ProGuard插件:OutOfMemoryError,如何增加heapspace?

我試圖增加對SBT的堆空間,但事實證明ProGuard的插件會生成它自己的Java進程,並已硬編碼-Xmx256M參數。我無法弄清楚如何改變它,只是改變了proguard代碼本身。

我在JDK 7

使用SBT-proguard的插件0.2.1與SBT 0.12.3和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的插件,或以其他方式解決這個問題?

回答

7

添加javaOptions in proguard := Seq("-Xmx...")線項目設置

更新

好吧,我想我知道你的問題是什麼。 如果您在SBT會話打印以下命令:

show proguard::java-options 

將打印你[info] List(-Xmx2G),這意味着在你的ProGuard configuration堆大小設置爲2GB,但如果你試試這個命令:show proguard:proguard::java-options它會告訴你[info] List(-Xmx256M)用於proguardTask。採取這種考慮我猜,你有你的項目設置是這樣的:

lazy val main = Project(
    id = "project", 
    base = file("."), 
    settings = Seq(javaOptions in proguard := Seq("-Xmx2G")) ++ proguardSettings) 

Basicly發生了什麼,使用默認配置proguardSettigns和的事實,任務正在使用的任務範圍爲清除您javaOptions設置命令。

所以加入這一行:

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") 

保留線

+0

我已經嘗試過,並且變化,但插件似乎忽略該設置。 –

+0

@JustinKaeser試圖增加'-XX:MaxPermSize = 1G' – 4lex1v

+0

好吧,我試過了,但由於燙髮大小不是問題,問題依然存在。 –

6

以上回答不是爲我最近SBT/SBT工作之間的順序和斷行-proguard。

隨着最近sbt-proguard插件和SBT 0.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")) 
+0

謝謝你幫助! – DynamicScope