gRPC Kotlin插件未生成DSL代码,现有Gradle配置问题排查
你的配置确实存在遗漏,当前仅配置了gRPC的Java/Kotlin存根生成插件,没有配置Protobuf官方的Kotlin语言绑定生成插件,这部分插件负责生成你需要的Kotlin DSL风格的消息构造代码。
修复步骤
- 补充Protobuf Kotlin代码生成插件配置
在protobuf的plugins闭包内新增kotlin插件声明,同时在generateProtoTasks的插件应用列表中添加该插件。 - 补充Protobuf Kotlin运行时依赖
需要在dependencies闭包中添加对应版本的protobuf-kotlin依赖,和你使用的protoc版本保持一致即可。
修改后完整配置
protobuf { // generatedFilesBaseDir = "generated-sources" protoc { artifact = "com.google.protobuf:protoc:3.17.3" } plugins { id("grpc") { artifact = "io.grpc:protoc-gen-grpc-java:1.39.0" } id("grpckt") { artifact = "io.grpc:protoc-gen-grpc-kotlin:1.2.0:jdk7@jar" } // 新增:Protobuf Kotlin 代码生成插件 id("kotlin") { artifact = "com.google.protobuf:protoc-gen-kotlin:3.17.3:jdk7@jar" } } generateProtoTasks { ofSourceSet("main").forEach { it.plugins { id("grpc") {} id("grpckt") {} id("kotlin") {} // 新增:应用Kotlin插件生成消息的Kotlin绑定代码 } } } }
dependencies { // 新增:Protobuf Kotlin 运行时依赖,版本和protoc版本保持一致 implementation("com.google.protobuf:protobuf-kotlin:3.17.3") // 原有其他依赖保持不变即可 }
验证方法
修改完成后执行./gradlew clean generateProto任务,生成的代码中会包含对应proto消息的Kotlin DSL扩展,你就可以直接使用类似语法构造对象,无需再手动调用builder:
val user = user { id = 123 name = "张三" email = "zhangsan@example.com" }
内容的提问来源于stack exchange,提问作者Gopinath
相关产品推荐
相关产品推荐

