我们正在将应用程序迁移到Play Framework。我们一直在使用gradle构建系统,并且面临着一些与sbt有关的问题。
我们将jooq用于我们的数据库,这意味着我们的构建文件需要包含数据库用户名/密码(因为jooq通过读取db模式生成代码)。由于它不是一个好主意,所有敏感数据都存储在构建可能运行的每个主机上的受保护文件中,构建系统从文件中读取,然后相应地配置系统。在gradle中它非常简单,但我已经用sbt击中了一个deadend。这就是我现在所拥有的:
import org.json4s._
import org.json4s.native.JsonMethods.
val jsonBuildConfig = TaskKey[JValue]("json-build-config")
jsonBuildConfig := {
val confLines = scala.io.Source.fromFile("/etc/application.conf").mkString
parse(confLines)
}
jooqOptions := Seq(
"jdbc.driver" -> "org.postgresql.Driver",
"jdbc.url" -> "FIXME",
"jdbc.user" -> "FIXME",
"jdbc.password" -> "FIXME"
)
问题是,需要从文件中选取三个配置参数,FIXME
作为jooqOptions
中的当前值。
在jsonBuildConfig
内,我可以这样做:
val confLines = scala.io.Source.fromFile("/etc/application.conf").mkString
val jsonConf = parse(confLines)
(jsonConf / "stagingdb" / "url").values
但是如何在jooqOptions
conf set中设置它?
答案 0 :(得分:3)
如果我已正确理解您的问题,您希望jooqOptions
值取决于jsonBuildConfig
的值。这里有一节介绍:
http://www.scala-sbt.org/0.13.5/docs/Getting-Started/More-About-Settings.html
基本上,您希望使用<<=
代替:=
来设置jooqOptions
,例如
jooqOptions <<= jsonBuildConfig.apply { jsonConf =>
val dbSettings = jsonConf / "stagingdb"
val dbUrl = dbSettings / "url"
val dbUser = ...
...
Seq("jdbc.driver" -> "...", "jdbc.url" -> dbUrl, ...)
}
对于较新版本的SBT,您可以通过在设置初始化程序块中调用setting.apply{...}
来避免setting.value
模式,例如
jooqOptions := {
val dbSettings = jsonBuildConfig.value / "stagingdb"
...
}
我链接到SBT 0.13.5的文档,它支持.value
功能。仔细检查您正在使用的SBT版本,并打开相应的文档页面以查看它是否支持该功能。