java - 配置 Java HBS 在何处查找部分模板

标签 java maven templates handlebars.js partials

简而言之,Java HBS (jknack.handlebars) 正在与父模板完全不同的目录中寻找我的部分 模板。有谁知道如何配置 jknack.handlebars 在何处查找部分模板?

我需要避免: createLayeredHtml 出错.. com.github.jknack.handlebars.HandlebarsException:/com/XXX/YYY/inline@53ce2ca5.hbs:598:8: 找不到部分 '/com/XXX/YYY/temp-templates/CarouselHeader.hbs'

这是父模板:

  <div data-module="{{type}}" data-module-id="{{module_id}}" class="slick-module athena-item-page-carousel">

{{> temp-templates/CarouselHeader}}

<div class="js-carousel-n-up carousel carousel-narrow carousel-banner carousel-n-up-responsive">
    {{> temp-templates/CarouselFirstTile}}

更新: 我应该说,HBS 正在寻找的默认位置是我的(如果这不是正确的术语,请原谅我)我的包在 java 中的主目录。它在/src/main/java/com/company/project 中查找。有没有办法将它指向/src/main/resources 之类的东西?

这是完整的错误:

[ERROR] 2015-09-18 17:23:34.688 [main] 
Error in createLayeredHtml..
    com.github.jknack.handlebars.HandlebarsException: /com/XXX/YYY/inline@53ce2ca5.hbs:598:8: The partial '/com/XXX/YYY/temp-templates/CarouselHeader.hbs' could not be found
        at com.github.jknack.handlebars.internal.Partial.merge(Partial.java:142)
        at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:128)
        at com.github.jknack.handlebars.internal.TemplateList.merge(TemplateList.java:61)
        at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:128)
        at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:115)
        at com.github.jknack.handlebars.Options.apply(Options.java:271)
        at com.github.jknack.handlebars.Options.fn(Options.java:237)
        at com.github.jknack.handlebars.Options.fn(Options.java:226)
        at com.github.jknack.handlebars.helper.IfHelper.apply(IfHelper.java:51)
        at com.github.jknack.handlebars.internal.Block.merge(Block.java:160)
        at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:128)
        at com.github.jknack.handlebars.internal.TemplateList.merge(TemplateList.java:61)
        at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:128)
        at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:115)
        at com.github.jknack.handlebars.internal.ForwardingTemplate.apply(ForwardingTemplate.java:82)
        at com.github.jknack.handlebars.internal.ForwardingTemplate.apply(ForwardingTemplate.java:60)
        at com.XXX.YYY.utils.HandlebarUtils.render(HandlebarUtils.java:80)
        at com.XXX.YYY.AthenaLayeredAsset.createLayeredHtml(AthenaLayeredAsset.java:68)
        at com.XXX.YYY.AthenaSlickCarousel.generateNarrowCarouselHTML(AthenaSlickCarousel.java:27)
        at com.XXX.YYY.TestAthenaLayeredAsset.testNarrowCarouselSimple(TestAthenaLayeredAsset.java:387)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
        at org.testng.TestRunner.privateRun(TestRunner.java:767)
        at org.testng.TestRunner.run(TestRunner.java:617)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
        at org.testng.SuiteRunner.run(SuiteRunner.java:240)
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
        at org.testng.TestNG.run(TestNG.java:1057)
        at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
        at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
        at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
        at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:125)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

最佳答案

基本上您需要确保您的模板在您的类路径中,并确保 TemplateLoader 知道您的“部分”在哪里。

在很久以前删除这个错误之后,我终于想出了如何确保包含我所有模板的目录包含在类路径中。我确信有不止一种方法可以做到这一点,maven 专家可能知道更好的方法,但我使用了:

http://maven.apache.org/surefire/maven-surefire-plugin/examples/configuring-classpath.html

然后为了确保您的 TemplateLoader 知道您的“部分”在哪里,您可以使用 setPrefix

https://github.com/jknack/handlebars.java

或者我们使用的版本在构造函数中有一个选项:

protected static final TemplateLoader loader = new ClassPathTemplateLoader("/partials/");

非常感谢 Roman 和 Tassos Bassoukos 的提示!!

关于java - 配置 Java HBS 在何处查找部分模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32662920/

相关文章:

java - 自动装箱不包装

java - 如何在 Maven 中使用 POM 作为依赖项?

java - 私有(private) JVM 上的 Spring boot ware 部署,无法访问 Controller

c++ - 为什么 std::function 作为 std::not2 的参数?

java - 使用 jdk 1.5 运行时,getNamespaceContext() 出现 NoSuchMethodError,但使用 1.6 则不然

java - 将数组列表值保存在函数中

java - 如果连接到互联网/wifi,Android 运行代码

java - 项目配置器 "org.jboss.tools.maven.apt.MavenCompilerAptProjectConfigurator"不可用

c++ - 为一个模板类提供多个模型以供选择

c++ - 具有 void 返回类型和模板化参数的 std::function