Sbt сборки JVM настроек - PullRequest
       92

Sbt сборки JVM настроек

0 голосов
/ 10 января 2019

Я просто пытаюсь понять разницу между следующими двумя способами настройки параметров JVM при создании jar в проекте scala с использованием плагина sbt-assembly:

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

Спасибо,

1 Ответ

0 голосов
/ 11 января 2019

SBT является приложением JVM, поэтому, когда вы запускаете оболочку SBT с помощью команды sbt, в конечном итоге это приводит к запуску экземпляра JVM.

JAVA_OPTS - это переменная окружения, которая понимается скриптом sbt; эти параметры передаются экземпляру JVM, в котором работает оболочка SBT и в котором выполняются все задачи. Другой способ добиться этого - передать параметр -mem:

sbt -mem 2g

Существуют также варианты хранения этих аргументов в определенных файлах. Например, вы можете создать файл с именем .sbtopts в корне вашего проекта со следующим содержимым:

-mem 2g

И затем каждый раз, когда SBT запускается в этом каталоге, аргумент -mem будет автоматически выбираться. Это удобный способ убедиться, что все люди, работающие над проектом, используют одинаковые параметры SBT (если вы, конечно, добавляете этот файл в хранилище),

Параметр javaOptions является параметром сборки SBT, и он совершенно не связан с параметрами, которые установлены для экземпляра JVM, в котором работает SBT. Параметр javaOptions используется для настройки задач, запускающих новые экземпляры JVM, например, вы можете настроить SBT для запуска нового экземпляра JVM при запуске метода main с помощью задачи runMain, а затем этот параметр можно использовать следующим образом:

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

Задача assembly, однако, не запускает никаких новых экземпляров JVM для выполнения своей работы, она полностью выполняется внутри экземпляра JVM SBT. Поэтому установка javaOptions для assembly ничего не изменит, поскольку эта задача даже не читает этот параметр.

...