【发布时间】:2015-08-31 00:55:17
【问题描述】:
如何声明 2 个自定义 sbt 设置,比如 A 和 B,在 Global 配置范围中定义 B,其内容取决于 A,在多个配置范围中以不同方式定义 A,使得 B 的结果值尽管 B 只定义了一次,但每个配置都不同?
考虑例如下面的targetHost,remote 中的定义与其他配置不同,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 在两个配置范围内具有不同的值,但由于它依赖于Global 范围内的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]
【问题讨论】:
-
我猜你需要明确指定任务的范围。例如,在两个作用域中实现两个
scriptContent,一个是targetHost in remote,另一个是简单的targetHost。