开发者社区> 问答> 正文

Freemarker如何使用jar中的模板??报错

A项目正常,打成jar后,Maven被B项目引用。

Freemarker配置:

<!-- 配置freeMarker的模板路径 com.simple.tag.FreeMarkerViewConfig -->
	<bean id="freemarkerConfig"
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="freemarkerSettings" ref="freemarkerConfiguration" />
		<property name="templateLoaderPath">
			<value>classpath:/templates/</value>
		</property>
		<property name="freemarkerVariables">
			<map>
				<entry key="xml_escape" value-ref="fmXmlEscape" />
			</map>
		</property>
		<property name="defaultEncoding">
			<value>utf-8</value>
		</property>
	</bean>
项目启动时报错:

17:45:29.204 [localhost-startStop-1] DEBUG o.s.w.s.v.f.FreeMarkerConfigurer - Cannot resolve template loader path [classpath*:/templates/] to [java.io.File]: using SpringTemplateLoader as fallback
java.io.FileNotFoundException: D:\Workspaces2\.metadata\.me_tcat7\webapps\community\classpath*:\templates does not exist.
    at freemarker.cache.FileTemplateLoader$1.run(FileTemplateLoader.java:125) ~[freemarker-2.3.19.jar:2.3.19]


Freemarker是否无法读取jar中的模板?

或者有比的变通方法?求教


展开
收起
爱吃鱼的程序员 2020-06-14 15:03:49 1059 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    模板路径不对jar中的配置文件可以读取到没有问题,是Freemarker读取不到jar中的模板回复<aclass='referer'target='_blank'>@程序员V:如果是在jar里面就直接写classpath*:applicationContext-.xml类似的看看对的,不打成jar包可以访问

    也遇到了这个问题,求指教,,,

    对freemarker没深入研究过,但是看异常日志就知道问题原因了。jar中的文件不能以File的形式读取,只能以流的形式读取。如果用File读取就会报文件不存在的异常。看下TemplateLoader的实现类,可以换成SpringTemplateLoader,这个模版加载器是用流的形式读取模版

    恰好,使用springboot+freemarker时,打项目打成jar包后,遇到这个问题。

    网上找了好久,一直没有找到合适的答案。后来,自己阅读了下出错部分源代码,终于整明白了。

    系统默认是优先加载文件系统的模板引擎,不过有这个异常,也并不影响使用,只是日志中会多个异常,有点强迫症的,心里难过。

    spring.freemarker.prefer-file-system-access=false 给你参考我的:

    spring: jackson:  date-format:yyyy-MM-ddHH:mm:ss#时间格式化  time-zone:Asia/Chongqing#时区设置 ############################## #以下是配置不同的模板引擎 ############################## #  DefaultExtensionsare: #  .html-Thymeleaf #  .tpl-Groovy #  .ftl-Freemarker #  *.vm-Velocity freemarker:  cache:false  template-loader-path:["classpath:/webapp/"]  prefer-file-system-access:false #不使用文件系统优先,而使用classpath下的资源文件优先,解决打jar包运行后,出现的异常问题


     

    解决了我的问题,我的是spring4.X<propertyname="preferFileSystemAccess"value="false"/>

    2020-06-14 15:04:05
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第15讲】:Spring Boot 2.0 API与Spring REST Docs实战 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载