开发者社区> 问答> 正文

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中的模板?

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


展开
收起
kun坤 2020-06-06 15:20:41 1456 0
1 条回答
写回答
取消 提交回答
  • 模板路径不对######jar中的配置文件可以读取到没有问题,是Freemarker读取不到jar中的模板######回复 @程序员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-dd HH:mm:ss #时间格式化
        time-zone: Asia/Chongqing #时区设置
    
      ##############################
      # 以下是配置不同的模板引擎
      ##############################
      #    Default Extensions are:
      #    *.html - Thymeleaf
      #    *.tpl - Groovy
      #    *.ftl - Freemarker
      #    *.vm - Velocity
    
      freemarker:
        cache: false
        template-loader-path: ["classpath:/webapp/"]
        prefer-file-system-access: false  #不使用文件系统优先,而使用classpath下的资源文件优先,解决打jar包运行后,出现的异常问题


     

    ######解决了我的问题, 我的是spring 4.X <property name="preferFileSystemAccess" value="false"/>
    2020-06-06 15:20:47
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

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