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