使用gRPC Kotlin Codegen Plugin仅生成单个类的问题求助
问题排查:Kotlin版gRPC客户端代码仅生成单个类
我在Ubuntu系统中已安装protoc,按照官方教程生成Kotlin版gRPC客户端代码,但仅生成了一个类。使用的是protoc-gen-grpc-kotlin-1.3.0-jdk8.jar插件,先后尝试Java 8和17版本均无改善。Java类可正常生成,但Kotlin仅生成一个服务类。以下是相关文件及命令,恳请帮忙排查:
protoc-gen-grpc-kotlin.sh 脚本内容
#!/usr/bin/bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" java -jar $DIR/protoc-gen-grpc-kotlin-1.3.0-jdk8.jar $@
HelloService.proto 文件内容
syntax = "proto3"; package com.example.grpc; option java_multiple_files = true; //import "google/api/annotations.proto"; message HelloRequest { string firstName = 1; string lastName = 2; } message HelloResponse { string greeting =1; } service HelloService { rpc hello (HelloRequest) returns (HelloResponse) {} // rpc hello(HelloRequest) returns (HelloResponse){ // option (google.api.http) = { // post: "/demo/item" // body: "*" // }; // } }
执行的protoc命令
protoc --kotlin_out=. --java_out=. --plugin=protoc-gen-kotlin=protoc-gen-grpc-kotlin.sh --proto_path=. HelloService.proto
排查要点
- 命令参数缺失:当前命令只指定了
--kotlin_out(用于生成Kotlin消息类),但gRPC客户端/服务端代码需要单独通过--grpc-kotlin_out参数触发生成,且要对应正确的插件映射。 - 插件映射错误:你的脚本是
protoc-gen-grpc-kotlin.sh,但命令里写的是protoc-gen-kotlin,应该把插件参数改为--plugin=protoc-gen-grpc-kotlin=protoc-gen-grpc-kotlin.sh,同时添加--grpc-kotlin_out=.参数。 - 修正后的命令示例:
protoc \ --kotlin_out=. \ --java_out=. \ --grpc-kotlin_out=. \ --plugin=protoc-gen-grpc-kotlin=protoc-gen-grpc-kotlin.sh \ --proto_path=. \ HelloService.proto
- 版本兼容性检查:确认protoc版本与grpc-kotlin 1.3.0插件匹配,建议使用protoc 3.20.x及以上版本。
- 查看调试日志:执行命令时添加
--grpc-kotlin_opt=debug参数,查看插件的详细输出,排查是否有隐藏的错误信息。
内容的提问来源于stack exchange,提问作者Rafael Souza
相关产品推荐
相关产品推荐

