Подтвердить что ты не робот

Настройка свойств системы с помощью "sbt run"

Я использую довольно недавнюю версию SBT (кажется, трудно понять, что такое версия). Я хочу передать свойства системы моему приложению с помощью sbt run следующим образом:

sbt -Dmyprop=x run

Как я могу это сделать?

4b9b3361

Ответ 1

Сценарий SBT обычно не создает новые процессы, поэтому вам также нужно сказать, чтобы это делалось, если вы хотите установить переданные аргументы. Вы можете добавить что-то подобное к настройкам сборки:

fork := true

javaOptions := Seq("-Dmx=1024M")

Более подробная информация о процессах forking в документации SBT.

Ответ 2

Я нашел лучший способ добавить это к build.sbt:

// important to use ~= so that any other initializations aren't dropped
// the _ discards the meaningless () value previously assigned to 'initialize'
initialize ~= { _ =>
  System.setProperty( "config.file", "debug.conf" )
}

Связано: При выполнении этой настройки для конфигурации загружаемой конфигурации (в моем случае использования) необходимо также вручную включить конфигурацию по умолчанию. Для этого Конфигурация типов, предложенная include "application", была недостаточной, но include classpath("application.conf") работал. Мысль упоминать, так как некоторые другие, возможно, захотят переопределить свойства системы по той же причине.

Источник: обсуждение в списке рассылки sbt

Ответ 3

Спасибо за указатель, это действительно помогло мне решить несколько связанную проблему с Scala Tests.

Оказалось, что sbt выполняет fork тесты, когда есть подпроекты (см. мой код), и некоторые из тестов не работают для получения системного свойства.

Итак, в sbt -Dsomething="some value" test некоторые из тестов завершились неудачно, когда не удалось найти something в свойствах системы (это был мой URI базы данных, поэтому это было важно!)

Это сводило меня с ума, поэтому я подумал, что буду публиковать его здесь для будущих ссылок для других (как правильно заметил @akauppi, шансы высоки, что "другие" могут быть мне в течение нескольких недель!).

Исправить было добавление следующего к build.st:

fork in Test := false