非SpringBoot Maven项目FileTemplateResolver模板前缀问题求助
解决方案:Thymeleaf Jar包启动模板找不到问题
问题根源
你用的FileTemplateResolver是从文件系统读取模板文件的,但打包成Jar后,模板文件嵌入在Jar包内部,无法通过本地文件路径访问,所以会抛出路径找不到的异常。必须改用基于类路径的解析器。
核心修复:替换为ClassTemplateResolver
把FileTemplateResolver换成org.thymeleaf.templateresolver.ClassLoaderTemplateResolver,它会从类路径(Jar包内的classes目录)读取资源,完美适配Jar环境。
修改后的代码:
public TemplateEngine getTemplateEngine(String templateSuffix) { ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); templateResolver.setTemplateMode(TemplateMode.HTML); // 类路径下的templates目录,对应Jar内的/classes/templates/ templateResolver.setPrefix("templates/"); templateResolver.setSuffix(templateSuffix); // 生产环境开启缓存,开发环境可设为0关闭缓存 templateResolver.setCacheTTLMs(3600000L); // 避免模板渲染乱码 templateResolver.setCharacterEncoding("UTF-8"); TemplateEngine templateEngine = new TemplateEngine(); templateEngine.setTemplateResolver(templateResolver); return templateEngine; }
配置说明
- 前缀设置:
setPrefix("templates/")对应Maven项目中src/main/resources/templates/目录,因为Maven会自动把src/main/resources下的文件编译到target/classes(Jar包内的根路径),类路径下用templates/即可定位到模板。 - 环境兼容:本地测试时,
ClassTemplateResolver同样能读取src/main/resources/templates下的文件,无需单独修改配置,实现开发和生产环境一致。 - 编码配置:添加
setCharacterEncoding("UTF-8")避免模板渲染时出现乱码。
额外检查项
- Maven打包配置:确保
pom.xml没有排除src/main/resources/templates目录,默认Maven会自动包含该目录,若有自定义配置需确认:<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.html</include> <include>**/*</include> </includes> </resource> </resources> </build> - 模板文件名:检查模板文件名和代码引用是否一致(注意大小写,Jar环境区分大小写)。
- 缓存调试:开发时可将
cacheTTLMs设为0,避免修改模板后需重启服务才能生效。
内容的提问来源于stack exchange,提问作者jasonwardenburg
相关产品推荐
相关产品推荐

