0

我偶然发现了这个Akka grpc 教程,它建议我们可以从具有.proto文件的项目创建一个 jar src/main/proto,并将其作为依赖项添加到客户端和服务器项目中以构建它们各自的存根。

libraryDependencies += "com.example" %% "my-grpc-service" % "1.0.0" % "protobuf-src"

但这似乎不起作用!是否有任何示例项目可以证明这将如何发挥作用?我们如何将 protobuf 源外部化并在基于 jvm 的项目中使用它?

4

1 回答 1

0

根据akka-grpc docs 的建议,我能够弄清楚如何正确外部化 protobuf 文件。

问题是我没有添加sbt-akka-grpcsbt 所需的插件来识别.proto文件并将它们包含在打包的 jar 中。如果没有这个插件.proto,打包的 jar 中将不会有任何文件可用。

addSbtPlugin("com.lightbend.akka.grpc" % "sbt-akka-grpc" % "1.1.0")

确保organization在您的中添加设置以build.sbt正确准备 jar。

organization := "com.iamsmkr"

此外,如果您希望将此 jar 交叉编译为多个版本,请在您的 中添加以下条目build.sbt

scalaVersion := "2.13.3"
crossScalaVersions := Seq(scalaVersion.value, "2.12.14")

然后发布:

$ sbt +publishLocal

发布适当的 jars 后,您现在可以将它们作为依赖项添加到客户端和服务器项目中,如下所示:

libraryDependencies += 
"com.iamsmkr" %% "prime-protobuf" % protobufSourceVersion % "protobuf-src"

你可以查看我正在开发的这个项目,看看它的实际效果。

替代方式

我想的另一种方法是,您可以将.proto文件保存在root目录中,然后在客户端和服务器中引用它们,build.sbt如下所示:

PB.protoSources.in(Compile) := Seq(sourceDirectory.value / ".." / ".." / "proto")

签出此项目以查看它的实际效果。

于 2021-07-20T03:50:45.377 回答