加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:43:53 所属栏目:安全 来源:网络整理
导读:当我尝试使用sbt-proguard插件为我的项目组装一个jar时,我总是在线程“main” java.lang.OutOfMemoryError中得到一个Exception: Java堆空间 我尝试增加sbt的堆空间,但事实证明,proguard插件生成了自己的java进程,并且-Xmx256M参数是硬编码的.我无法弄清楚如
当我尝试使用sbt-proguard插件为我的项目组装一个jar时,我总是在线程“main” java.lang.OutOfMemoryError中得到一个Exception: Java堆空间

我尝试增加sbt的堆空间,但事实证明,proguard插件生成了自己的java进程,并且-Xmx256M参数是硬编码的.我无法弄清楚如何更改它,而不是更改proguard代码本身.

我在JDK 7上使用sbt 0.12.3和scala 2.10.1的sbt-proguard插件0.2.1

我已尝试在proguard中设置javaOptions:= Seq(“ – Xmx2G”)以及proguard =“ – Xmx2G”中的javaOptions,但插件似乎忽略/覆盖此:

> 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插件,或以其他方式解决此问题?

解决方法

在proguard中添加javaOptions:= Seq(“ – Xmx …”)行到您的项目设置

更新

好吧我想我知道你的问题是什么.
如果在sbt会话中打印以下命令:

show proguard::java-options

它会打印你[info] List(-Xmx2G),这意味着你的proguard配置堆大小设置为2GB,但如果你尝试这个命令:show proguard:proguard :: java-options它会显示[info]列表(-Xmx256M)在proguardTask中使用.考虑到这一点,我猜你在项目设置中有这样的东西:

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

基本上发生了什么,proguard使用默认配置设置并删除你的javaOptions设置,事实是任务正在使用命令的任务范围.

所以添加这一行:

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

对于您的设置,它看起来应该类似于:

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

现在调用show proguard:proguard :: java-options它会显示[info] List(-Xmx2G).您还可以打开会话的全局日志记录并查看是否一切正常:在Global中设置logLevel:= Level.Debug

更新

我更喜欢Build.scala文件,但在* .sbt中它更简单,只需按以下顺序添加这些行:

import com.typesafe.sbt.SbtProguard._
import com.typesafe.sbt.SbtProguard.ProguardKeys.proguard

proguardSettings

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

保留行之间的顺序和换行符

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读