grpc-java生成类使用旧包Generated注解,Jakarta环境编译失败如何解决
grpc-java生成代码
javax.annotation.Generated注解兼容Jakarta环境解决方案 方案1:直接禁用@Generated注解生成
grpc-java代码生成器原生支持关闭该注解生成,只需在构建工具的protobuf编译配置中为grpc-java插件添加disable_generated_annotations=true参数即可,从根源避免包名冲突问题。
Maven配置示例(基于protobuf-maven-plugin)
<plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifactId> <version>0.6.1</version> <configuration> <protocArtifact>com.google.protobuf:protoc:3.21.7:exe:${os.detected.classifier}</protocArtifact> <pluginId>grpc-java</pluginId> <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.50.2:exe:${os.detected.classifier}</pluginArtifact> <plugins> <plugin> <id>grpc-java</id> <!-- 禁用Generated注解生成 --> <options>disable_generated_annotations=true</options> </plugin> </plugins> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>compile-custom</goal> </goals> </execution> </executions> </plugin>
Gradle配置示例(基于protobuf-gradle-plugin)
protobuf { protoc { artifact = "com.google.protobuf:protoc:3.21.7" } plugins { grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.50.2' } } generateProtoTasks { all().forEach { task -> task.plugins { grpc { // 禁用Generated注解生成 option 'disable_generated_annotations=true' } } } } }
方案2:替换注解为Jakarta版本
如果需要保留@Generated注解,可在grpc-java 1.49.0及以上版本中,通过参数指定注解全类名,直接生成jakarta包下的对应注解。
只需将上述配置中的参数替换为generated_annotation_type=jakarta.annotation.Generated即可:
- Maven中修改options标签值为
<options>generated_annotation_type=jakarta.annotation.Generated</options> - Gradle中修改option参数为
option 'generated_annotation_type=jakarta.annotation.Generated'
注意:grpc-java版本低于1.49.0时不支持自定义注解类型,建议优先升级grpc版本,或使用方案1禁用注解生成。
内容的提问来源于stack exchange,提问作者Tomas Langer
相关产品推荐
相关产品推荐

