spring-boot-starter-freemarker 没有找到模板
spring-boot-starter-freemarker does not find templates
在没有进一步配置的情况下使用 spring-boot-starter-freemarker
我希望能够从默认模板路径 (src/resources/tempaltes
) 加载模板(注意它是 src/...
而不是 build/...
) .
这里有这个文件:
src/resources/templates/emails/welcome.ftl
正在尝试将其加载为模板:
// some service class
@Autowired
private Configuration freemarkerConfig;
public void doStuff() {
Template t = freemarkerConfig.getTemplate("emails/welcome.ftl");
// ...
}
失败并显示此错误消息:
freemarker.template.TemplateNotFoundException: Template not found for name "emails/welcome.text.ftl".
The name was interpreted by this TemplateLoader: MultiTemplateLoader(loader1 = FileTemplateLoader(baseDir="/some/path/backend/build/resources/main/templates", canonicalBasePath="/some/path/backend/build/resources/main/templates/"), loader2 = ClassTemplateLoader(resourceLoaderClass=org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer, basePackagePath="" /* relatively to resourceLoaderClass pkg */)).
因此配置看起来还不错,但它使用的是 build
文件夹而不是 src
文件夹。当 运行 通过 ./gradlew bootRun
我们看到错误。执行 ./gradlew build
然后 ./gradlew bootRun
找到模板 - 因为它们现在位于 build
文件夹中。但对于开发而言,如果不需要完全重新构建,将不胜感激。
所以,我知道我们现在可以手动配置 freemarker 以从 src
文件夹加载,但这感觉很糟糕。
我是在做 s/th 错误还是这是预期的行为?
您可以配置 bootRun
以便从源位置加载源。假设模板是主源集的一部分,即它们在 src/main/resources
中,配置如下:
bootRun {
sourceResources sourceSets.main
}
这是 Spring Boot 的 Gradle 插件的参考文档中的 described。
在没有进一步配置的情况下使用 spring-boot-starter-freemarker
我希望能够从默认模板路径 (src/resources/tempaltes
) 加载模板(注意它是 src/...
而不是 build/...
) .
这里有这个文件:
src/resources/templates/emails/welcome.ftl
正在尝试将其加载为模板:
// some service class
@Autowired
private Configuration freemarkerConfig;
public void doStuff() {
Template t = freemarkerConfig.getTemplate("emails/welcome.ftl");
// ...
}
失败并显示此错误消息:
freemarker.template.TemplateNotFoundException: Template not found for name "emails/welcome.text.ftl".
The name was interpreted by this TemplateLoader: MultiTemplateLoader(loader1 = FileTemplateLoader(baseDir="/some/path/backend/build/resources/main/templates", canonicalBasePath="/some/path/backend/build/resources/main/templates/"), loader2 = ClassTemplateLoader(resourceLoaderClass=org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer, basePackagePath="" /* relatively to resourceLoaderClass pkg */)).
因此配置看起来还不错,但它使用的是 build
文件夹而不是 src
文件夹。当 运行 通过 ./gradlew bootRun
我们看到错误。执行 ./gradlew build
然后 ./gradlew bootRun
找到模板 - 因为它们现在位于 build
文件夹中。但对于开发而言,如果不需要完全重新构建,将不胜感激。
所以,我知道我们现在可以手动配置 freemarker 以从 src
文件夹加载,但这感觉很糟糕。
我是在做 s/th 错误还是这是预期的行为?
您可以配置 bootRun
以便从源位置加载源。假设模板是主源集的一部分,即它们在 src/main/resources
中,配置如下:
bootRun {
sourceResources sourceSets.main
}
这是 Spring Boot 的 Gradle 插件的参考文档中的 described。