我了解到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"
答案 0 :(得分:0)
您可以在编译/构建项目时用提供的环境变量值替换这些值。为此,您必须
A {
B = "Some Value"
B = ${?B_ENV}
C = "Some value to be modified"
C = ${?C_ENV}
}
B_ENV
和C_ENV
是您在构建之前或在构建命令中(在构建命令之前)在终端中设置的环境变量
$ B_ENV=1 C_ENV=2 sbt run
答案 1 :(得分:0)
在这种情况下,您可以不使用sbt
,并且这种方法也适用于maven
或cradle
。
*.conf
支持来自typesafe config
(https://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