#protocol-buffers #quarkus #infinispan
#буферы протокола #quarkus #infinispan
Вопрос:
У меня есть проект, в котором я пытаюсь заставить protobuf работать с infinispan, quarkus и gradle. Проблема в том, что, хотя я следую инструкциям, приведенным на домашней странице Quarkus: https://quarkus.io/guides/infinispan-client , кажется, что когда я использую gradle, маршаллеры не генерируются и не регистрируются так, как они должны быть. Мне кажется, что это сводится к org.infinispan.protostream:protostream-processor
тому, что он не выполняется, когда gradle является инструментом сборки. Является ли это сознательным решением, что поддерживается только Maven, или я упускаю что-то очевидное в моей настройке gradle?
Копии самых простых случаев можно найти здесь: https://github.com/radiosphere/gradle-java-protobuf для gradle и здесь для maven: https://github.com/radiosphere/mvn-java-protobuf . Эти проекты чрезвычайно просты, в основном они пытаются запустить простой код при запуске:
public void onStartup(@Observes StartupEvent startupEvent) {
RemoteCache<String, CounterState> cache = cacheManager.administration().getOrCreateCache("default", DefaultTemplate.DIST_SYNC);
cache.put("a", new CounterState(2L));
CounterState state = cache.get("a");
logger.infof("State: %s", state);
}
В проекте maven это работает, в проекте gradle выдается исключение, в котором говорится, что маршаллер не найден. Помимо выбора инструмента сборки, проекты должны быть идентичными.
Комментарии:
1. Для всех, кто приходит сюда и использует Kotlin, вас может заинтересовать эта ссылка: github.com/radiosphere/gradle-kotlin-protobuf . Это пример, в котором процессор аннотаций infinispan настроен для gradle / kotlin.
Ответ №1:
Процессор аннотаций запускается в сборке Maven, поскольку io.quarkus:quarkus-infinispan-client
имеет compile
зависимость от org.infinispan.protostream:protostream-processor
.
Похоже, Gradle принял решение не использовать процессоры аннотаций, найденные в пути к классу компиляции:
Поскольку детали реализации важны для процессоров аннотаций, они должны быть объявлены отдельно в пути к процессору аннотаций. Gradle игнорирует процессоры аннотаций в пути к классу компиляции.
Это означает, что вам нужно добавить явную annotationProcessor
зависимость:
annotationProcessor 'org.infinispan.protostream:protostream-processor:4.4.0.Final'