ScalaPB生成代码报错:类型参数不符合GeneratedMessageCompanion边界要求
问题解决方案
该报错本质是ScalaPB编译工具版本、项目依赖的ScalaPB运行时版本、Protobuf版本三者不兼容,或生成代码的包路径不匹配导致,按以下步骤逐一排查即可解决:
统一版本号对齐
你当前使用的scalapbc工具版本为0.11.1,必须保证项目构建配置(sbt的build.sbt、maven的pom.xml等)中引入的scalapb-runtime依赖版本和工具版本完全一致,不能出现跨大版本混用的情况。以sbt配置为例,需要添加如下配置:libraryDependencies += "com.thesamet.scalapb" %% "scalapb-runtime" % "0.11.1" % ProtobufConfig同时你编译命令中指定的protobuf版本为3.5.1,要确保项目中引入的
protobuf-java依赖版本也和该值完全一致。修正生成代码的包路径配置
你proto文件中声明的包为protobuff,但生成代码中引用的类路径为protobuff.sample.embedtoRedis,是scalapbc默认将proto文件名作为了包后缀。如果需要固定包路径,可在proto文件头部添加自定义包配置:option scalapb.package = "com.huawei.utility.protobuff.embedtoRedis";直接指定生成代码的完整包名,避免类引用路径不匹配的问题。
重新生成代码
完成上述配置调整后,删除原有生成的Scala文件,重新执行编译命令生成新的代码即可。正常生成的embedtoRediscase类会自动继承scalapb.GeneratedMessage with scalapb.Message[embedtoRedis],满足泛型边界要求。
内容的提问来源于stack exchange,提问作者Satheesh
相关产品推荐
相关产品推荐

