2

拥有一个声明 Qute 模板和 REST 端点来呈现它的 maven 模块,我想将此模块包含在另一个 maven 项目中。问题是,看起来,目标模块没有编译,因为它没有/在它的资源/模板位置找到模板(模板包含在包含模块的 jar 中)。

有什么方法可以指示 Qute(在构建时)从其他位置读取模板或禁用此构建检查(因为模板位于正确位置的类路径中?

我现在可以使它正常工作的唯一方法是将我的模板复制到资源/模板中的目标项目,但这似乎不是正确的解决方案。

提前致谢

4

2 回答 2

1

是的,默认情况下,只有位于其中的模板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/12084https://github.com/quarkusio/quarkus/issues/10376

于 2021-03-02T08:30:06.583 回答
0

好的,我找到了另一个解决方案,使用“低级”引擎实例并“手动”解析模板:

engine.parse(new BufferedReader(new InputStreamReader(FlowChartResource.class.getResourceAsStream([PATH to My Template]))).lines().collect(Collectors.joining("\n")))
于 2021-03-01T19:56:25.837 回答