0

我有一个使用 gradle 和 kotlin DSL 的现有项目。我已经使用 gradle build 设置了 protobuf 代码自动生成。

生成了 Kotlin grpc 代码,我可以使用流和协程来实现我的后端。

但是没有生成 kotlin DSL 代码。所以我目前只剩下使用详细的样板驱动构建器模式来创建我的对象。

下面是我的 protobuf 插件设置。

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"
        }
    }
    generateProtoTasks {
        ofSourceSet("main").forEach {
            it.plugins {
                id("grpc") {}
                id("grpckt") {}
            }
        }
    }
}

我在这里错过了什么吗?

4

1 回答 1

1

在网上搜索了很多答案后,我从这里找到了一个

看起来 grpc 实现者已经改变了插件的配置方式。所以回答我自己的问题,这样可能会为下一个开发人员节省一些时间。

protobuf {

    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"
        }
    }
    generateProtoTasks {
        ofSourceSet("main").forEach {
            it.plugins {
                id("grpc") {}
                id("grpckt") {}
            }

            it.builtins {
                id("kotlin")
            }
        }
    }
}

关键是添加这个块。然后我的 protobuf 消息生成了 kotlin DSL 函数。

            it.builtins {
                id("kotlin")
            }

配置 Kotlin DSL 生成后,编译失败。然后我不得不添加protobuf-kotlin依赖项。

implementation("com.google.protobuf:protobuf-kotlin:3.19.1")
于 2021-11-26T07:27:22.040 回答