如何根据不同的 sbt 命令设置 SettingKey 的值?
Posted
技术标签:
【中文标题】如何根据不同的 sbt 命令设置 SettingKey 的值?【英文标题】:How to set the value of a SettingKey based on different sbt commands? 【发布时间】:2017-06-07 07:29:46 【问题描述】:有来自 flywaydb.org 的命令 sbt flywayMigrate
。该命令需要预先设置flywayUrl
、flywayUser
和flywayPassword
。到目前为止还不错。
现在我希望能够将sbt flywayMigrate
用于两种不同的环境;它们的变量应该不同。
我尝试创建两个新命令:sbt flywayMigrateDev
和 sbt flywayMigrateProd
。我不知道如何将新命令连接到flywayMigrate
。
我尝试创建一个新范围。但我不知道如何正确连接变量和任务。
我想知道是否有人可以给我一个如何做到这一点的例子。我想看一个代码示例。
我们可以将问题简化为:
命令sbt flywayMigrate
依赖于flywayUrl
。我们如何通过调用 sbt 命令(或任何其他方式也不错)允许命令使用不同的flywayUrl
s?
谢谢!
【问题讨论】:
【参考方案1】:您应该为此使用config
。
示例.sbt
文件内容:
// Set up your configs.
lazy val prodConfig = config("prod")
lazy val devConfig = config("dev")
// Set up any configuration that's common between dev and prod.
val commonFlyway = Seq(
// For the sake of example, a couple of shared settings.
flywayUser := "pg_admin",
flywayLocations := Seq("filesystem:migrations")
)
// Set up prod and dev.
inConfig(prodConfig)(flywayBaseSettings(prodConfig) ++ commonFlyway)
flywayUrl.in(prodConfig) := "jdbc:etc:proddb.somecompany.com"
// Or however you want to load your production password.
flywayPassword.in(prodConfig) := sys.env.getOrElse("PROD_PASSWD", "(unset)")
inConfig(devConfig)(flywayBaseSettings(prodConfig) ++ commonFlyway)
flywayUrl.in(devConfig) := "jdbc:etc:devdb.somecompany.com"
flywayPassword.in(devConfig) := "development_passwd"
现在您可以运行 prod:flywayMigrate
和 dev:flywayMigrate
分别迁移生产和开发。
有关其他示例,请参阅 the Flyway docs page。
【讨论】:
我刚刚问了另一个类似的问题:***.com/questions/42738849/… 感谢您在这里提出更好的解决方案。 您是如何学会这样做的?我正在浏览 SBT 文档,但无法弄清楚。我很想知道你是如何学会它的。 旧的示例代码正是我在自己的sbt
配置中所拥有的。我更新了示例代码以匹配最新版本的 Flyway 插件,并添加了相关文档的链接。
你用的是哪个版本的插件?以上是关于如何根据不同的 sbt 命令设置 SettingKey 的值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 sbt-native-packager 创建基本项目设置