是否可以在多个 build.sbt 文件中覆盖并使用相同的值?

Is it possible to overwrite and use the same value in multiple build.sbt files?

我有以下虚拟项目结构:

|───employee-uService
|   ├───backend
|   |    ├───employee-api
|   |        ├───project
|   |        ├───src
|   |        │   └───main
|   |        │       ├───protobuf
|   |        │       └───scala
|   |        ├───build.sbt
|   ├───build.sbt
|───build.sbt (root project build)

employee-api 中的 build.sbt 包含具有 .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 文件中覆盖的函数调用?

鉴于您描述的目录结构(原型在每个项目中的 src/main/protobuf 下),您不需要为每个项目设置 PB.protoSources,因为这是默认设置。但是,如果您想明确指定它并允许用户覆盖,您可以在 scalapbSettings 函数中包含以下行:

val protoSources = PB.protoSources in Compile := Seq(
    file((sourceDirectory in Compile).value / projectFolder))

那么projectFolder应该是相对于src/main(并且可以有默认值"protobuf"的)

提示:在 SBT shell 中,您可以键入 protocSources 以查看此设置对每个项目的价值。