Я определил минимальный 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