0

我有以下虚拟项目结构:

|───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函数设置 proto 源文件夹,如:

val protoSources = PB.protoSources in Compile := Seq(file(s"$projectFolder/src/main/protobuf"))

其中 projectFolder 是函数的参数。

build.sbt 在层次结构中更高一级(employee-uService)定义了employee-api 和相应的impl 项目并聚合它们,而root build 聚合...-uService 项目。

根据我正在编译的项目,scalapbSettings函数的给定字符串参数必须更改以表示正确的路径。employee-uService/backend/employee-api(例如:在运行 api 编译时,它必须在根目录中,它是..

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

4

1 回答 1

0

给定您描述的目录结构(protossrc/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以查看每个项目的此设置的值。

于 2018-08-03T20:47:41.873 回答