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

时间:2018-08-03 11:25:28

标签: scala sbt protocol-buffers scalapb

我有以下虚拟项目结构:

|───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函数的给定字符串参数必须更改以表示正确的路径。 (例如:在运行api编译时,其根目录必须为employee-uService/backend/employee-api

如何将一个值传递给可以在不同的build.sbt文件中覆盖的函数调用?

1 个答案:

答案 0 :(得分:0)

鉴于您描述的目录结构(每个项目的原型位于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来查看每个项目的此设置的值。