如何将 Java 编译时自定义注释添加到 Protobuf 生成的代码中

Iva*_*lin 15 java annotations protocol-buffers generated jacoco

我将 gRPC 框架与 Proto 3 一起使用。我们有一个 java 代码覆盖工具 Jacoco,它可以扫描 java 字节代码以查找编译类中的 java“注释”@Generate,如果有,它会从覆盖范围中跳过该 java 类。但是 Proto-compiler 添加了这个注释:

@javax.annotation.Generated(
    value = "by gRPC proto compiler (version 1.20.0)",
    comments = "Source: myProto.proto")
public class MyClass {
...
}
Run Code Online (Sandbox Code Playgroud)

但是注释 javax.annotation.Generate 有 @Retention(value=SOURCE) ,它在编译的类中不存在。

有没有办法在编译时向 protobuf 生成的 java 文件添加注释?

And*_*cev 2

这是一个老问题,但仍然

https://github.com/protocolbuffers/protobuf/issues/42

所以你应该添加--java_out=annotate_code到选项列表中protoc

如果你使用https://github.com/google/protobuf-gradle-plugin gradle 插件进行代码生成,那么你可以这样做(Gradle Kotlin DSL):

protobuf {
    generateProtoTasks {
        all().forEach { task ->
            task.builtins {
                getByName("java") {
                    option("annotate_code")
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)