Можно ли перезаписать и использовать одно и то же значение в нескольких файлах build.sbt?
У меня есть следующая фиктивная структура проекта:
|───employee-uService
| ├───backend
| | ├───employee-api
| | ├───project
| | ├───src
| | │ └───main
| | │ ├───protobuf
| | │ └───scala
| | ├───build.sbt
| ├───build.sbt
|───build.sbt (root project build)
Build.sbt в employee-api содержит определение проекта с .settings(scalapbSettings("."))
установка. scalapbSettings
Функция устанавливает исходную папку с исходным кодом, например:
val protoSources = PB.protoSources in Compile := Seq(file(s"$projectFolder/src/main/protobuf"))
Где projectFolder - это параметр функции.
Build.sbt на один уровень выше в иерархии (employee-uService) определяет employee-api и соответствующий проект impl и агрегирует их, в то время как корневая сборка агрегирует... uService проекты.
В зависимости от проекта, который я компилирую, данный строковый параметр для scalapbSettings
Функция должна измениться, чтобы представить правильный путь. (например: в корне это должно быть employee-uService/backend/employee-api
в то время как при запуске компилятора API, это .
,
Как передать значение в вызов функции, которое может быть перезаписано в разных файлах build.sbt?
1 ответ
Учитывая структуру каталогов, которые вы описали (прототипы находятся под src/main/protobuf
в каждом проекте) вам не нужно устанавливать PB.protoSources
для каждого проекта, так как это по умолчанию. Однако, если вы хотите указать это явно и разрешить пользователям переопределять, вы можете иметь в своем scalapbSettings
функция следующей строки:
val protoSources = PB.protoSources in Compile := Seq(
file((sourceDirectory in Compile).value / projectFolder))
Тогда projectFolder должно быть относительно src/main
(и может иметь значение по умолчанию "protobuf"
из)
Совет: в оболочке SBT вы можете набрать, protocSources
чтобы увидеть, какова ценность этих настроек для каждого проекта.