Несколько конфигураций SBT должны быть эксклюзивными, но все они активируются одновременно - почему? - PullRequest
0 голосов
/ 14 сентября 2018

Я определил минимальный build.sbt с двумя пользовательскими профилями 'dev' и 'staging' (то, что SBT, кажется, называет конфигурациями).Однако, когда я запускаю SBT с Конфигурацией, которая была сначала определена в файле (dev), выполняются оба блока Конфигурации - и если оба изменяют одну и ту же настройку, выигрывает последний (промежуточный).

Это кажетсянарушить любое понятие условной активации, так что я делаю не так с SBT?

Для справки, я хочу эмулировать концепцию условно активированных профилей Maven, например mvn test -P staging.

SBT версия: 1.2.1

build.sbt:

name := "example-project"
scalaVersion := "2.12.6"
...

fork := true

// Environment-independent JVM property (always works)
javaOptions += "-Da=b"

// Environment-specific JVM property (doesn’t work)
lazy val Dev = config("dev") extend Test
lazy val Staging = config("staging") extend Test
val root = (project in file("."))
  .configs(Dev, Staging)
  .settings(inConfig(Dev)(Seq(javaOptions in Test += "-Dfoo=bar")))
  .settings(inConfig(Staging)(Seq(javaOptions in Test += "-Dfoo=qux")))

Команда:

# Bad
sbt test
  => foo=qux
     a=b

# Bad
sbt clean dev:test
  => foo=qux
     a=b

# Good
sbt clean staging:test
  => foo=qux
     a=b

1 Ответ

0 голосов
/ 16 сентября 2018

Обратите внимание, что, несмотря на использование inConfig, вы по-прежнему устанавливаете javaOptions in Test, то есть в конфигурации Test. Если вы удалите in Test, он будет работать как положено:

...
  .settings(inConfig(Dev)(javaOptions += "-Dfoo=bar"))
  .settings(inConfig(Staging)(javaOptions += "-Dfoo=qux"))

(также Seq(...) упаковка не нужна)

Сейчас в сб:

> show Test/javaOptions
[info] *

> show Dev/javaOptions
[info] * -Dfoo=bar

> show Staging/javaOptions
[info] * -Dfoo=qux

Вы можете достичь того же результата, явно указав для каждой настройки (без inConfig перенос):

  .settings(
    Dev/javaOptions += "-Dfoo=bar",
    Staging/javaOptions += "-Dfoo=qux",
    ...
  )

(здесь Conf/javaOptions совпадает с javaOptions in Conf)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...