0

我有一个 build.sbt 用于同一个项目中的几个包。当我进行 sbt 编译时,我的 protobuf 文件位于 [packagename]/src/main/protobuf/* 下,因此它不会扫描这些文件,因为它们在路径中有额外的包名称。如何更改默认的 protobuf 文件路径?

4

2 回答 2

0

从您的问题中不清楚您的 sbt 构建是单项目还是多项目构建。如果您看到类似val someSubProject = project.in(file(...).

如果您build.sbt是单个项目构建,您可以添加一行来自定义扫描原型的位置:

Compile / PB.protoSources += file("pkgname/src/main/protobuf")

如果您有一个带有 project 的多项目构建proj1,那么它应该已经按照您期望的方式工作:

val proj1 = project.in(file("proj1"))
    .settings(
        PB.targets in Compile := Seq(
          scalapb.gen(javaConversions=true) -> (sourceManaged in Compile).value / "scalapb"
        ),

        libraryDependencies ++= Seq(
          "com.thesamet.scalapb" %% "scalapb-runtime" % scalapb.compiler.Version.scalapbVersion % "protobuf",
        )
    )

然后 sbt-protoc 将为proj1/src/main/protobuf. 源代码将被编译为proj1项目的一部分。

Compile / PB.protoSources您可以通过在该项目的设置中进行设置来自定义它查找的路径。例如,如果您希望它为另一个顶级目录中的 protos 生成源代码,您可以执行以下操作:

val proj1 = project.in(file("proj1"))
    .settings(
        PB.targets in Compile := Seq(
          scalapb.gen(javaConversions=true) -> (sourceManaged in Compile).value / "scalapb"
        ),

        Compile / PB.protoSources :=
          Seq((ThisBuild / baseDirectory).value / "somewhere" / "protos"),

        libraryDependencies ++= Seq(
          "com.thesamet.scalapb" %% "scalapb-runtime" % scalapb.compiler.Version.scalapbVersion % "protobuf",
        )
    )
于 2021-10-06T15:53:31.443 回答
-1

我建议使用AkkaGrpcPlugin多项目 SBT 配置。

.proto文件放在一个单独的项目中,并让其他人依赖它。这个项目只有一个<root>/grpc/src/main/protobuf包含.proto文件的目录。当这个项目被编译时,它将创建所有可以被其他依赖它的项目拾取的存根文件。

这是一个大纲build.sbt文件:

lazy val top_level =
  (project in file("."))
    .aggregate(grpc, main)

lazy val grpc =
  project
    .in(file("grpc"))
    .settings(
      ???
    )
    .enablePlugins(AkkaGrpcPlugin)

lazy val main =
  project
    .in(file("main"))
    .settings(
      ???
    )
    .dependsOn(grpc)

并将其添加到plugins.sbt

addSbtPlugin("com.lightbend.akka.grpc" % "sbt-akka-grpc" % "1.1.1")
于 2021-10-06T06:32:43.497 回答