SBT-如何基于外部源向application.conf文件添加/修改值

时间:2018-10-15 07:36:44

标签: scala sbt typesafe typesafe-config

我了解到SBT具有generate source code and resource files的功能。

在我的情况下,我想在项目的编译/打包过程中在application.conf文件中添加/修改字段(将其他字段留在原处)

例如,我的application.conf文件具有以下内容:

A {
  B = "Some Value"
  C = "Some value to be modified"
}

我希望在SBT中读取一个外部文件并更改或添加A.B或A.C的值

因此,如果可以执行以下操作:

build.sbt

lazy val myProject = project.in(file('myproject')
// pseudo code - How do I do this?
.sourceGenerators in Compile += "Read file /path/to/external/file and add or replace the value of application.conf A.B = some external value"

2 个答案:

答案 0 :(得分:0)

您可以在编译/构建项目时用提供的环境变量值替换这些值。为此,您必须

A {
  B = "Some Value"
  B = ${?B_ENV}
  C = "Some value to be modified"
  C = ${?C_ENV} 
}

B_ENVC_ENV是您在构建之前或在构建命令中(在构建命令之前)在终端中设置的环境变量

$ B_ENV=1 C_ENV=2 sbt run

来源:https://www.playframework.com/documentation/2.6.x/ProductionConfiguration#using-environment-variables

答案 1 :(得分:0)

在这种情况下,您可以不使用sbt,并且这种方法也适用于mavencradle

*.conf支持来自typesafe confighttps://github.com/lightbend/config)。

有一个功能可以使环境变量在配置中使用,应该很适合解决此问题。

我建议使用两种方法

1。)缺少配置失败

如果此功能的配置很重要,并且为了防止出现配置错误的应用程序,则启动应该会因缺少环境变量而失败。

application.conf

key=${TEST} // expects "TEST" to be set, fails otherwise

2。)具有覆盖的硬编码值

如果存在明智的默认行为,则仅在某些情况下应更改。

application.conf

key="test" // hardcoded key
key=${?TEST} // override "key" with 3nv "$TEST" value, when it is given