Akka迁移Pekko时gRPC插件编译报错问题求助
解决Pekko gRPC迁移中的scalapb及类型未找到问题
1. 修正plugins.sbt配置,补全依赖插件
Pekko gRPC依赖sbt-protoc处理protobuf文件,你之前的配置里缺少这个插件,需要补上:
resolvers += "Akka library repository".at("https://repo.akka.io/maven") addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1") addSbtPlugin("org.apache.pekko" % "pekko-grpc-sbt-plugin" % "1.0.2") addSbtPlugin("com.thesamet" % "sbt-protoc" % "1.0.6")
2. 完善build.sbt的依赖与代码生成规则
之前的配置缺少scalapb核心依赖、Scala 3适配依赖,以及明确的代码生成目标配置,更新后如下:
ThisBuild / version := "0.1.0-SNAPSHOT" ThisBuild / scalaVersion := "3.3.1" val pekkoVersion = "1.0.2" lazy val root = (project in file(".")) .settings( name := "IracingSetups", // 配置protobuf代码生成目标路径 PB.targets in Compile := Seq( scalapb.gen() -> (sourceManaged in Compile).value / "scalapb", pekkoGrpc.gen() -> (sourceManaged in Compile).value / "pekko-grpc" ), libraryDependencies ++= Seq( "org.apache.pekko" %% "pekko-actor" % pekkoVersion, "org.apache.pekko" %% "pekko-actor-typed" % pekkoVersion, "org.apache.pekko" %% "pekko-actor-testkit-typed" % pekkoVersion % "test", "org.apache.pekko" %% "pekko-grpc-runtime" % pekkoVersion, // scalapb核心依赖 "com.thesamet.scalapb" %% "scalapb-runtime" % scalapb.compiler.Version.scalapbVersion % "protobuf", // Scala 3专属适配依赖 "com.thesamet.scalapb" %% "scalapb-runtime-scala3" % scalapb.compiler.Version.scalapbVersion % "protobuf" ), // Scala 3需要开启宏注解支持 scalacOptions ++= Seq("-Ymacro-annotations") ) .enablePlugins(PekkoGrpcPlugin)
3. 检查protobuf文件配置
- 确保你的
.proto文件放在默认路径src/main/protobuf下,若自定义路径需添加PB.protoSources in Compile := Seq(file("你的自定义路径"))配置 - 确认
.proto文件中正确定义了IracingService,示例结构如下:
syntax = "proto3"; package com.yourpackage; // 替换为你的实际包名 service IracingService { rpc ExampleMethod(ExampleRequest) returns (ExampleResponse); } message ExampleRequest { string content = 1; } message ExampleResponse { string result = 1; }
4. 关键迁移差异说明
- Pekko gRPC不像Akka gRPC那样自动引入
sbt-protoc,必须手动添加 - Scala 3环境下必须额外引入
scalapb-runtime-scala3,否则会出现类型兼容问题 - 显式指定代码生成路径可避免和其他插件的目录冲突
5. 验证步骤
- 清理旧编译产物:
sbt clean - 重新编译项目:
sbt compile - 检查
target/scala-3.3.1/src_managed目录,确认是否生成了IracingService相关的服务端、客户端代码
内容的提问来源于stack exchange,提问作者Leon Weemen
相关产品推荐
相关产品推荐

