8

プロジェクトの jar を sbt-proguard プラグインでアセンブルしようとすると、必ずException in thread "main" java.lang.OutOfMemoryError: Java heap space

sbt のヒープ領域を増やしてみましたが、proguard プラグインが独自の Java プロセスを生成し、-Xmx256Mパラメーターがハードコーディングされていることがわかりました。プロガードコード自体を変更する以外は、変更方法がわかりません。

sbt-proguard プラグイン 0.2.1 を sbt 0.12.3 と Scala 2.10.1 で JDK 7 で使用しています

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 プラグインに渡す方法、またはこの問題を解決するにはどうすればよいですか?

4

2 に答える 2

9

javaOptions in proguard := Seq("-Xmx...")プロジェクト設定に行を追加する

更新しました

わかりました、私はあなたの問題が何であるかを知っていると思います. sbt セッションで次のコマンドを出力する場合:

show proguard::java-options

これは[info] List(-Xmx2G)、proguardconfigurationヒープ サイズが に設定されていることを意味します2GBが、このコマンドを試すと、proguardTask で使用されているものshow proguard:proguard::java-optionsが表示されます[info] List(-Xmx256M)。これを考慮して、プロジェクト設定に次のようなものがあると思います:

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

基本的に何が起こっているのか、proguardSettings はデフォルト構成を使用し、タスクがコマンドのタスクスコープを使用しているという事実で 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")

行間の順序と改行を維持する

于 2013-07-09T08:01:39.580 に答える
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"))
于 2014-01-31T17:51:34.823 に答える