Расположение шаблона Quarkus Qute из другого модуля maven

Имея модуль maven, который объявляет шаблон Qute и конечную точку REST для его рендеринга, я хотел включить этот модуль в другой проект maven. Проблема, по-видимому, в том, что целевой модуль не компилируется, поскольку он не имеет / не находит шаблон в его расположении ресурсов / шаблонов (шаблон включен в банку включенного модуля).

Есть ли способ указать Qute (во время сборки) читать шаблоны из других мест или отключить эту проверку сборки (поскольку шаблон находится в пути к классам в правильном месте?

Единственный способ заставить его работать сейчас - это скопировать мой шаблон в целевой проект в ресурсах / шаблонах, но это не кажется правильным решением.

заранее спасибо


person Sérgio Sousa    schedule 01.03.2021    source источник


Ответы (2)


Да, по умолчанию проверяются и могут быть внедрены только шаблоны, расположенные в src/main/resources/templates.

Вы можете анализировать любой контент шаблона вручную с помощью Engine.parse() или даже добавить собственный указатель шаблонов с помощью io.quarkus.qute.EngineBuilder.addLocator(), например что-то вроде:

import io.quarkus.qute.EngineBuilder;

class MyEngineConfig {

   void configureEngine(@Observes EngineBuilder builder) {
     builder.addLocator(path -> Optional.of(new TemplateLocation() {

        @Override
        public Reader read() {
            return new BufferedReader(new InputStreamReader(FlowChartResource.class.getResourceAsStream(path)));
        }

        @Override
        public Optional<Variant> getVariant() {
            return Optional.empty();
        }

    }));
   }
}

Недостатком является то, что Quarkus не может проверять / внедрять такие шаблоны.

См. Также связанные проблемы https://github.com/quarkusio/quarkus/issues/12084 и https://github.com/quarkusio/quarkus/issues/10376.

person Martin Kouba    schedule 02.03.2021

Хорошо, я нашел другое решение, используя экземпляр низкоуровневого движка и вручную проанализировав шаблон:

engine.parse(new BufferedReader(new InputStreamReader(FlowChartResource.class.getResourceAsStream([PATH to My Template]))).lines().collect(Collectors.joining("\n")))
person Sérgio Sousa    schedule 01.03.2021