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

Scala Play! REST API项目集成Protocol Buffer失败求助

问题

在Scala Play! REST API项目中配置Protocol Buffer后编译失败,当前配置如下:

build.sbt 代码

scalaVersion := "2.13.10"

dependencyOverrides += "org.scala-lang.modules" %% "scala-java8-compat" % "1.0.0"

libraryDependencies ++= Seq(
  guice,
  "org.scalatestplus.play" %% "scalatestplus-play" % "5.0.0" % Test,
  "mysql" % "mysql-connector-java" % "8.0.26",
  "io.getquill" %% "quill-jasync-mysql" % "4.6.0",
  "com.thesamet.scalapb" %% "scalapb-runtime" % "0.11.11"
)

project/scalapb.sbt 代码

addSbtPlugin("com.thesamet" % "sbt-protoc" % "1.0.3")

编译错误信息

[error] stack trace is suppressed; run last protocExecutable for the full output
[error] (protocExecutable) lmcoursier.internal.shaded.coursier.error.FetchError$DownloadingArtifacts: Error fetching artifacts:
[error] https://repo1.maven.org/maven2/com/google/protobuf/protoc/3.15.6/protoc-3.15.6-osx-aarch_64.exe: not found: https://repo1.maven.org/maven2/com/google/protobuf/protoc/3.15.6/protoc-3.15.6-osx-aarch_64.exe
[error] Total time: 0 s, completed 4 Apr 2023, 14:26:17

已尝试清理、更新、重载项目及重启,问题仍未解决。

解决方法

这个错误的核心原因是:sbt-protoc默认拉取的protoc 3.15.6版本没有适配Apple Silicon(osx-aarch_64)的二进制包,还错误地尝试下载Windows平台的.exe格式文件。修复步骤如下:

  1. 指定兼容的protoc版本
    在build.sbt中添加配置,选用支持Apple Silicon的protoc版本(3.21.12及以上版本均提供对应二进制包):
PB.protocVersion := "3.21.12"
  1. 完善插件依赖
    在project/scalapb.sbt中补充scalapb的编译插件依赖,否则无法生成Scala代码:
addSbtPlugin("com.thesamet" % "sbt-protoc" % "1.0.3")
libraryDependencies += "com.thesamet.scalapb" %% "compilerplugin" % "0.11.11"
  1. 配置代码生成规则
    在build.sbt中添加代码生成目标,指定protobuf文件编译后的Scala代码输出路径:
PB.targets in Compile := Seq(
  scalapb.gen() -> (sourceManaged in Compile).value / "scalapb"
)
  1. 清理并重新编译
    执行sbt命令清理缓存后重新编译:
sbt clean compile

另外,确保项目的protobuf文件放在src/main/protobuf目录下,这是scalapb默认的扫描路径。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:25:28