Маршалеры Protobuf не регистрируются при использовании Gradle?

#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'