如何修复Micronaut HTTP微服务添加gRPC客户端时的编译错误
解决Micronaut 4 + JDK17下gRPC生成代码找不到javax.annotation.Generated的问题
问题原因
JDK 17移除了javax.annotation相关包,默认的gRPC代码生成插件会在生成的类中使用javax.annotation.Generated注解,导致编译时找不到该类。同时Micronaut 4已全面切换到Jakarta EE规范,不再兼容旧的javax注解。
解决方案
优先采用方案一,避免依赖旧的javax包:
方案一:修改Protobuf插件配置,生成Jakarta兼容注解或禁用注解
在项目的build.gradle文件中调整protobuf代码生成配置,指定使用Jakarta注解,或者直接禁用@Generated注解生成:
方式1:生成Jakarta.annotation.Generated注解
protobuf { protoc { artifact = "com.google.protobuf:protoc:3.25.3" // 可根据实际版本调整 } plugins { grpc { artifact = "io.grpc:protoc-gen-grpc-java:1.59.0" // 可根据实际版本调整 } } generateProtoTasks { all()*.plugins { grpc {} } // 配置Java代码生成时使用Jakarta的注解 all().each { task -> task.builtins { java { option 'annotation=jakarta.annotation.Generated' } } } } }
方式2:禁用生成@Generated注解
如果不需要该注解,可直接关闭生成:
protobuf { // ... 保留原有其他配置 generateProtoTasks { all().each { task -> task.builtins { java { option 'no_generated_annotation' } } } } }
修改配置后,重新执行./gradlew clean generateProto重新生成代码,再启动项目即可。
方案二:添加javax.annotation依赖(不推荐)
如果暂时无法调整生成配置,可临时添加旧的javax注解依赖,但可能与Micronaut 4的Jakarta规范产生冲突:
dependencies { // ... 保留原有其他依赖 implementation 'javax.annotation:javax.annotation-api:1.3.2' }
内容的提问来源于stack exchange,提问作者wureka
相关产品推荐
相关产品推荐

