如何改变scalaPB protobuf文件的默认路径?



我有一个构建。sbt几个包在同一个项目。当我做sbt编译时,我的protobuf文件在[packagename]/src/main/protobuf/*下,所以它不会扫描这些文件,因为它们在路径中有附加的包名。如何更改默认的protobuf文件路径?

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

这样的行,您可以告诉它是一个多项目构建。如果您的build.sbt是单个项目构建,您可以添加一行来自定义protos被扫描的位置:

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

如果你有一个项目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下protos的源。源代码将被编译为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",
)
)

我建议使用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")

相关内容

  • 没有找到相关文章