scala – 如何依赖“当前”配置中的设置
发布时间:2020-12-16 18:28:36 所属栏目:安全 来源:网络整理
导读:如何声明2个自定义sbt设置,比如A和B,在全局配置范围中定义B,其内容依赖于A,在几个配置范围中以不同方式定义A,使得每个配置中B的结果值不同即使B只定义一次? 考虑下面的targetHost,在远程中定义与在其他配置中不同,并且scriptContent取决于它: object MyBui
如何声明2个自定义sbt设置,比如A和B,在全局配置范围中定义B,其内容依赖于A,在几个配置范围中以不同方式定义A,使得每个配置中B的结果值不同即使B只定义一次?
考虑下面的targetHost,在远程中定义与在其他配置中不同,并且scriptContent取决于它: object MyBuild extends Build { lazy val remote = config("remote") describedAs ("configuration for remote environement ") lazy val targetHost = settingKey[String]("private hostname of master server") lazy val scriptContent = settingKey[String]("Some deployment script") lazy val root: Project = Project("meme",file(".")). settings( name := "hello",targetHost := "localhost",targetHost in remote := "snoopy",scriptContent := s""" # some bash deployment here /usr/local/uberDeploy.sh ${targetHost.value} """ ) } 我希望scriptContent在两个配置范围中都有不同的值,但由于它依赖于全局范围中的targetHost,因此它的值始终相同: > scriptContent [info] [info] # some bash deployment here [info] /usr/local/uberDeploy.sh localhost [info] > remote:scriptContent [info] [info] # some bash deployment here [info] /usr/local/uberDeploy.sh localhost [info] 而我想获得以下内容: > scriptContent [info] [info] # some bash deployment here [info] /usr/local/uberDeploy.sh localhost [info] > remote:scriptContent [info] [info] # some bash deployment here [info] /usr/local/uberDeploy.sh snoopy [info] 解决方法
找到了!我的问题实际上是重复的(抱歉……),最相关的答案是:
How can i make an SBT key see settings for the current configuration?
=>我们需要多次应用设置,每个范围一次,以强制重新评估scriptSetting的内容: import sbt._ import sbt.Keys._ object MyBuild extends Build { lazy val remote = config("remote") describedAs ("configuration for remote environement ") lazy val targetHost = settingKey[String]("private hostname of master server") lazy val scriptContent = settingKey[String]("Some deployment script") lazy val scriptSettings = Seq( scriptContent := s""" # some bash deployment here /usr/local/uberDeploy.sh ${targetHost.value} """ ) lazy val root: Project = Project("meme",file(".")) .settings( name := "hello",targetHost in remote := "snoopy" ) .settings(scriptSettings: _*) .settings(inConfig(remote)(scriptSettings) :_*) } 产生预期结果: > scriptContent [info] [info] # some bash deployment here [info] /usr/local/uberDeploy.sh localhost [info] > remote:scriptContent [info] [info] # some bash deployment here [info] /usr/local/uberDeploy.sh snoopy [info] > (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |