6

Я пытаюсь создавать/настраивать дистрибутивы среды-специфики (для разработки, качества и производства) с использованием встроенных функций упаковщика sbt, доступных в Play (2.2). Я пытался добиться этого, используя следующие параметры в build.sbt файле:Специфичные для среды дистрибутивы с использованием sbt native packager

val dev = config("dev") extend(Universal) 
val qual = config("qual") extend(Universal) 
val prod = config("prod") extend(Universal) 


def distSettings: Seq[Setting[_]] = 
    inConfig(dev)(Seq(
    mappings in Universal <+= (resourceDirectory in Compile) map { dir => 
    println("dev") 
    (dir/"start.bat.dev") -> "bin/start.bat" 
    // additional mappings 
    } 
)) ++ 
    inConfig(qual)(Seq(
    mappings in Universal <+= (resourceDirectory in Compile) map { dir => 
     println("qual") 
     (dir/"start.bat.qual") -> "bin/start.bat" 
     // additional mappings 
    } 
)) ++ 
    inConfig(prod)(Seq(
    mappings in Universal <+= (resourceDirectory in Compile) map { dir => 
     println("prod") 
     (dir/"start.bat.prod") -> "bin/start.bat" 
     // additional mappings 
    } 
)) 


play.Project.playScalaSettings ++ distSettings 

В консоли SBT, когда я печатаю «Dev: расстояние» Я ожидал увидеть только «Dev» в качестве выходного сигнала и соответственно, только соответствующие отображения, которые будут использоваться. Вместо этого, похоже, что все сопоставления во всех конфигурациях объединяются. Скорее всего, я не понимаю, как должны работать конфиги в SBT. Кроме того, могут быть лучшие подходы, которые достигают того, что я ищу.

+0

Примечание: Этот вопрос уже размещен на странице https://groups.google.com/forum/#!topic/play-framework/gdTv_hPxBq0, но я решил, что в этом случае SO может быть лучше. –

ответ

2

inConfig(c)(settings) означает использовать c как конфигурацию, если она явно не указана в settings. В этом примере конфигурация для mappings указана как Universal, поэтому все сопоставления добавляются в конфигурацию Universal, а не более конкретную.

Вместо этого сделать:

inConfig(prod)(Seq(
    mappings <+= ... 
)) 

То есть, удалить in Universal часть.

Примечание: поскольку более конкретные конфигурации, такие как prod, распространяются Universal, они включают в себя сопоставления от Universal.

+1

Хорошо, я вижу. Однако, если я это сделаю, теперь я получаю сообщение об ошибке «Ссылки на неопределенные настройки: /prod: сопоставления из /prod: сопоставления» (то же самое для dev: сопоставления и сопоставления: сопоставление). –

Смежные вопросы