Sbt 程序集 JVM 设置

Sbt assembly JVM settings

我只是想了解在使用 sbt-assembly 插件在 scala 项目中生成 jar 时接下来两种设置 JVM 参数的方式之间的区别:

// This works fine - no memory issues while building jar
set "JAVA_OPTS=-Xms2g -Xmx2g"

// in build.sbt 
// Getting memory issues while building jar
javaOptions in assembly += "-Xms2g -Xmx2g"

谢谢,

SBT 是 JVM 应用程序,因此,当您使用 sbt 命令启动 SBT shell 时,最终会启动 JVM 实例。

JAVA_OPTS 这里是一个环境变量,sbt 脚本可以理解;这些选项被传递给 SBT shell 正在 运行ning 的 JVM 实例,所有任务都在其中执行。实现此目的的另一种方法是传递 -mem 选项:

sbt -mem 2g

还有将这些参数存储在特定文件中的选项。例如,您可以在项目的根目录中创建一个名为 .sbtopts 的文件,内容如下:

-mem 2g

然后每次在此目录中启动 SBT 时,-mem 参数将自动被拾取。这是确保所有从事项目工作的人都使用相同 SBT 选项的便捷方式(当然,如果您将此文件提交到存储库),

javaOptions设置是一个SBT构建设置,它与SBT为运行ning的JVM实例设置的选项完全无关。 javaOptions 设置用于配置启动新 JVM 实例的任务,例如您可以将 SBT 配置为在您通过 runMain 任务 运行 一个主要方法时启动一个新的 JVM 实例,然后可以像这样使用此设置:

runMain / javaOptions := "..."  // same as `javaOptions in runMain` but using more modern (and recommended) syntax

但是,assembly 任务不会启动任何新的 JVM 实例来完成它的工作,它 运行 完全在 SBT JVM 实例中。因此,为 assembly 设置 javaOptions 将不会执行任何操作,因为此任务甚至不读取此设置。