You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 验证步骤

  1. 清理旧编译产物:sbt clean
  2. 重新编译项目:sbt compile
  3. 检查target/scala-3.3.1/src_managed目录,确认是否生成了IracingService相关的服务端、客户端代码

内容的提问来源于stack exchange,提问作者Leon Weemen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:33:24