【问题标题】:Clarification on scope delegation of dockerExposedPorts with sbt-native-packager使用 sbt-native-packager 澄清 dockerExposedPorts 的范围委托
【发布时间】:2021-08-11 11:53:09
【问题描述】:

我正在使用 Scala Play 附带的 sbt-native-packager 插件:

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.8")

我想知道为什么在使用root项目时没有设置dockerExposedPorts设置:

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 的 scope delegation,案例 1. 的范围为 root / Docker / Zero / dockerExposedPorts,它应该比案例 3.root / Zero / Zero / dockerExposedPorts 更具体。我在这里错过了什么?

【问题讨论】:

    标签: scala playframework sbt sbt-native-packager


    【解决方案1】:

    是的,Docker / dockerExposedPortsZero / dockerExposedPorts 更具体。但与您似乎假设的不同,将更具体的范围委托给不太具体的范围,而不是相反。手册是这样说的:

    此功能允许您在更通用的范围内设置一次值,从而允许多个更具体的范围继承该值。

    事实上,这是唯一可行的方法,因为您可以定义 e。 G。 Docker / dockerExposedPortsUniversal / dockerExposedPortsZero / dockerExposedPorts 将委托给其中哪一个?对此没有明智的答案,因此委托往另一个方向发展。

    【讨论】:

    • 谢谢。因此,据我了解,我们必须将在范围中设置值与在范围中“查找”值分开。使用Docker / dockerExposedPorts := Seq(9000),我们将值设置在一个狭窄的特定范围内。当我们想要查找值Zero / dockerExposedPorts 时,它在一个不太具体的范围内(没有设置值)并且可以在更不具体的范围内委托/查找,并且永远不会到达Docker / dockerExposedPorts。对吗?
    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2014-06-02
    • 2015-10-03
    • 2015-10-11
    • 2013-11-16
    • 2014-01-27
    相关资源
    最近更新 更多