SBT - Как я могу добавить / изменить значения в файле application.conf на основе внешнего источника - PullRequest
0 голосов
/ 15 октября 2018

Я прочитал, что SBT имеет функциональность для генерации исходного кода и файлов ресурсов .

В моем случае я хочу добавить / изменить поле в файле application.conf во время компиляции/ упаковка проекта (оставляя остальные на месте)

Например, мой файл application.conf имеет что-то вроде:

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

Я хотел бы в SBT прочитать внешний файл иизмените или добавьте значение AB или AC

Так что, если это возможно, сделать что-то вроде:

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 голосов
/ 15 октября 2018

В этом случае вы можете обойтись без sbt, и этот подход также будет работать с maven или cradle.

Поддержка *.conf имеет значение typesafe config (* 1009).*

Существует функция для получения переменных среды для использования в конфигурации, которая должна хорошо подходить для решения проблемы.

Существует два подхода, которые я бы предложил использовать

1.) Ошибка при отсутствующей конфигурации

Если конфигурация этого значения важна и для предотвращения отладки неверно сконфигурированного приложения, запуск должен завершиться с ошибкой из-за отсутствующих переменных среды.

in 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

0 голосов
/ 15 октября 2018

Вы можете заменить значения значениями среды, предоставленными при компиляции / сборке вашего проекта.Для этого вам нужно будет

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

Источник: https://www.playframework.com/documentation/2.6.x/ProductionConfiguration#using-environment-variables

...