【问题标题】:How to plugin into grpc-java to modify code generation and add setNameOrClear(null) methods?如何插入 grpc-java 以修改代码生成并添加 setNameOrClear(null) 方法?
【发布时间】:2020-05-01 12:46:17
【问题描述】:

关于每个数据库字段的所有这些额外代码,我们都遇到了太多问题

if(databaseObj.getName() != null)
   builder.setName(databaseObj.getName());

我读到了连接到 protobuf 中的方形,在 java 中添加了 setOrClear 方法。当我们也使用 gradle 生成时,我们如何做到这一点?

我们现在正在使用此页面中的 gradle 代码..

https://github.com/grpc/grpc-java

谢谢, 院长

【问题讨论】:

    标签: protocol-buffers grpc grpc-java protobuf-java


    【解决方案1】:

    您可以通过protoc_insertion_points 完成此操作。当您生成 Java 代码时,您会看到像 // @@protoc_insertion_point(...) 这样的 cmets。这就是插入发生的地方。

    虽然看起来很有用,但这种方法对于在多个项目中使用的 .protos 有严重的缺陷。 所有项目使用相同的 .proto 和相同的语言应该使用相同的插件,否则会导致the diamond dependency problem。这就是为什么 gRPC 使用这种方法,而是在与正常消息生成不同的文件中生成其类。我强烈反对这种方法,因为它会把你逼入绝境,而且你不知道什么时候需要“付钱给吹笛者”。

    要插入一个点,您的插件需要在与 java 内置函数相同的protoc 命令行调用中运行。然后,您的插件需要为您要注入代码的每个文件设置 CodeGeneratorResponse.file.insertion_pointcontent

    【讨论】:

    • 再次感谢!!!这个周末打算玩一下。
    猜你喜欢
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2020-06-22
    • 2014-08-08
    • 2017-12-21
    相关资源
    最近更新 更多