Gradle构建Quarkus+Infinispan项目时Protobuf marshallers未注册问题
这不是官方仅支持Maven的设计,是Gradle与Maven对注解处理器的默认处理逻辑差异导致的配置遗漏,可按如下步骤修复:
核心原因
Gradle 5.0+ 版本默认将编译类路径和注解处理器路径完全隔离,不会自动从implementation依赖中扫描注解处理器;而Maven未做路径隔离,默认会从编译依赖中自动识别并执行注解处理器,这是两个逻辑一致的项目构建结果不同的根本原因。
修复方案
在你的build.gradle文件的dependencies配置块中,显式声明protostream-processor为注解处理器依赖:
dependencies { // 原有项目依赖保持不变 implementation 'org.infinispan.protostream:protostream' // 新增以下注解处理器配置 annotationProcessor 'org.infinispan.protostream:protostream-processor' }
可选适配配置
如果开启了Gradle增量编译,可添加如下配置保证生成的marshaller文件被正确识别:
tasks.withType(JavaCompile) { options.annotationProcessorGeneratedSourcesDirectory = file("$buildDir/generated-sources/annotations") }
验证方法
执行./gradlew compileJava命令后,检查build/generated-sources/annotations目录下是否生成了CounterState对应的Marshaller类,存在则说明配置生效,重启项目即可正常运行。
内容的提问来源于stack exchange,提问作者Johan Carlsson
相关产品推荐
相关产品推荐

