如何在 JVM 生态系统中外部化 protobuf 文件?
How to externalize protobuf files in JVM ecosystem?
我偶然发现了这个 Akka grpc tutorial,它建议我们可以从 src/main/proto
下有 .proto
文件的项目创建一个 jar,并将其作为依赖项添加到客户端和服务器项目中构建各自的存根。
libraryDependencies += "com.example" %% "my-grpc-service" % "1.0.0" % "protobuf-src"
但这似乎行不通!!是否有任何示例项目可以演示这将如何运作?我们如何将 protobuf 源外部化并在基于 jvm 的项目中使用它们?
我能够根据 akka-grpc docs 的建议弄清楚如何正确地外部化 protobuf 文件。
问题是我没有添加 sbt 所需的 sbt-akka-grpc
插件来识别 .proto
文件并将它们包含在打包的 jar 中。如果没有此插件,打包的 jar 中将不会提供任何 .proto
文件。
addSbtPlugin("com.lightbend.akka.grpc" % "sbt-akka-grpc" % "1.1.0")
确保在 build.sbt
中添加 organization
设置以正确准备 jar。
organization := "com.iamsmkr"
此外,如果您希望将此 jar 交叉编译为多个版本,请在 build.sbt
中添加以下条目:
scalaVersion := "2.13.3"
crossScalaVersions := Seq(scalaVersion.value, "2.12.14")
然后发布:
$ sbt +publishLocal
发布适当的 jar 后,您现在可以将它们作为依赖项添加到您的客户端和服务器项目中,如下所示:
libraryDependencies +=
"com.iamsmkr" %% "prime-protobuf" % protobufSourceVersion % "protobuf-src"
您可以查看 this project 我正在努力查看实际效果。
替代方式
我想到的另一种方法是,您可以将 .proto
文件保存在 root
目录中,然后在客户端和服务器 build.sbt
中引用它们,如下所示:
PB.protoSources.in(Compile) := Seq(sourceDirectory.value / ".." / ".." / "proto")
结帐 this project 以查看实际效果。
我偶然发现了这个 Akka grpc tutorial,它建议我们可以从 src/main/proto
下有 .proto
文件的项目创建一个 jar,并将其作为依赖项添加到客户端和服务器项目中构建各自的存根。
libraryDependencies += "com.example" %% "my-grpc-service" % "1.0.0" % "protobuf-src"
但这似乎行不通!!是否有任何示例项目可以演示这将如何运作?我们如何将 protobuf 源外部化并在基于 jvm 的项目中使用它们?
我能够根据 akka-grpc docs 的建议弄清楚如何正确地外部化 protobuf 文件。
问题是我没有添加 sbt 所需的 sbt-akka-grpc
插件来识别 .proto
文件并将它们包含在打包的 jar 中。如果没有此插件,打包的 jar 中将不会提供任何 .proto
文件。
addSbtPlugin("com.lightbend.akka.grpc" % "sbt-akka-grpc" % "1.1.0")
确保在 build.sbt
中添加 organization
设置以正确准备 jar。
organization := "com.iamsmkr"
此外,如果您希望将此 jar 交叉编译为多个版本,请在 build.sbt
中添加以下条目:
scalaVersion := "2.13.3"
crossScalaVersions := Seq(scalaVersion.value, "2.12.14")
然后发布:
$ sbt +publishLocal
发布适当的 jar 后,您现在可以将它们作为依赖项添加到您的客户端和服务器项目中,如下所示:
libraryDependencies +=
"com.iamsmkr" %% "prime-protobuf" % protobufSourceVersion % "protobuf-src"
您可以查看 this project 我正在努力查看实际效果。
替代方式
我想到的另一种方法是,您可以将 .proto
文件保存在 root
目录中,然后在客户端和服务器 build.sbt
中引用它们,如下所示:
PB.protoSources.in(Compile) := Seq(sourceDirectory.value / ".." / ".." / "proto")
结帐 this project 以查看实际效果。