#scala #playframework #sbt #sbt-native-packager
Вопрос:
Я использую плагин sbt-native-packager, который поставляется с Scala Play:
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.8")
Я хотел бы знать, почему этот dockerExposedPorts
параметр не задан для root
проекта при использовании:
name := """scala-play-react-seed"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file("."))
.enablePlugins(PlayScala)
.settings(
Docker / dockerExposedPorts := Seq(9000), // <-- 1. doesn't work
)
Docker / dockerExposedPorts := Seq(9000), // <-- 2. also doesn't work
$ sbt show root/dockerExposedPorts
[info] *
Однако это сработает, если я удалю Docker
часть конфигурации:
.settings(
dockerExposedPorts := Seq(9000), // <-- 3. works
)
$ sbt show root/dockerExposedPorts
[info] * 9000
Насколько я понимаю делегирование области действия sbt, случай 1. ограничен как root / Docker / Zero / dockerExposedPorts
, что должно быть более конкретным, чем случай 3. root / Zero / Zero / dockerExposedPorts
. Что я здесь упускаю?
Ответ №1:
Да, Docker / dockerExposedPorts
это более конкретно, чем Zero / dockerExposedPorts
. Но в отличие от того, что вы, похоже, предполагаете, именно более конкретные области делегируются менее конкретным, а не наоборот. В руководстве так сказано:
Эта функция позволяет задать значение один раз в более общей области, позволяя нескольким более конкретным областям наследовать значение.
И на самом деле, это единственный способ, которым это может быть, потому что вы можете определить, например, оба Docker / dockerExposedPorts
и . Universal / dockerExposedPorts
Кому из них Zero / dockerExposedPorts
делегировать полномочия? На это нет разумного ответа, поэтому делегирование идет в другом направлении.
Комментарии:
1. Спасибо. Поэтому, как я понимаю, мы должны отделить настройку значения в области от «поиска» значения в области. С
Docker / dockerExposedPorts := Seq(9000)
помощью мы устанавливаем значение в узкой конкретной области. Когда мы хотим найти значениеZero / dockerExposedPorts
, оно находится в менее определенной области (без набора значений) и может делегировать/искать в еще менее определенных областях и никогда не достигнетDocker / dockerExposedPorts
. Это правильно?