161213、Maven资源替换和Freemarker模板

先介绍一下本文的两位主角:

Apache Maven - 正当红的项目管理工具 
FreeMarker - 老牌的模板引擎

两者貌似互不相干,何来冲突呢?

原来Maven有一个内置的资源替换机制, 可以对由Maven管理的资源文件进行变量替换。 预定义的Maven属性变量包括${name}${project.version}${project.packaging}${project.artifactId}等。 熟悉FreeMarker的同学就会发现Maven使用和FreeMarker相同的方法来定义变量:${变量名}

如果把FreeMarker模板文件放在Maven资源文件目录下(比如src/main/resources), 在缺省配置下, Maven打包工具会扫描这些FreeMarker模板文件并替换其中所有Maven可识别的变量。

举例而言, 有以下FreeMarker模板代码

<tr>
  <td class="label">Name:</td>
  <td>My Maven project</td>
</tr>

其中的${name}变量应该是FreeMarker变量,由FreeMarker引擎在运行时刻进行替换, 但${name}同时又是一个Maven预定义的变量, 当进行Maven项目打包时, 该变量会被替换成对应的Maven属性值并写入打包文件中, 最终打包文件中的模板会如下所示。

<tr>
  <td class="label">Name:</td>
  <td>My Maven project</td>
</tr>

  解决方法有两种, 简单的是在FreeMarker模板中,避免使用Maven属性变量名, 比如将${name}替换成${customerName}, 这样Maven就不会修改这个文件了。

更好的方法是在Maven POM文件中声明对FreeMarker模板文件进行直接复制,不要进行任何Maven资源替换。 如下例所示, 这里定义了两个成对的过滤规则, 第一个规则声明不要对FreeMarker模板文件进行资源替换, 第二个规则则声明对FreeMarker模板文件进行直接复制。

<resources>
<resource>
<directory>src/main/java</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.ftl</include>
<include>**/*.tpl</include>
</includes>
</resource>

<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.ftl</include>
<include>**/*.tpl</include>
</includes>
</resource>
</resources>

注:没有第二个规则的话,FreeMarker模板文件不会被复制到最终的打包文件中。

时间: 2024-10-10 15:32:41

161213、Maven资源替换和Freemarker模板的相关文章

开发常用镜像资源替换为国内开源镜像(yum,compose,maven,docker,android sdk,npm,国内开源镜像汇总)

一.国内开源镜像站点汇总 阿里云开源镜像站 (http://mirrors.aliyun.com/)网易开源镜像站 (http://mirrors.163.com/)中国科学技术大学开源镜像站 (http://mirrors.ustc.edu.cn/)清华大学开源软件镜像站 (https://mirrors.tuna.tsinghua.edu.cn/)中国电信天翼云 (http://mirrors.ctyun.cn/) 二.软件版 (一).操作系统类 1.Ubuntu阿里云:http://mir

Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则.强大的功能.高效的渲染效率.详尽的帮助说明与不断的更新与维护.常见的前端模板引擎有: 常用的java后台模板引擎:jsp.FreeMarker.Velocity等. 请不要迷恋速度,为了推广的测试可能是片面的,好的模板引擎经得起时间考验,建议大家选择成熟的.常用的模板引擎.另外不管前后端的模板引擎

FreeMarker模板文件的组成(2)

1.FreeMarker模板文件主要由如下4个部分组成:       1.1文本:直接输出的部分       1.2注释:<#-- ... -->格式部分,不会输出       1.3插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出       1.4FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出 2.概要介绍四部分 最简单的模板是普通  HTML  文件(或者是其他任何文本文件—FreeMarker  本身不属于HTML).

freemarker 模板中定义变量

在模板中可以定义三种类型的变量: 简单变量:它能从模板中的任何位置来访问,或者从使用 include 指令引入的模板访问.可以使用 assign 或 macro 指令来创建或替换这些变量. 局部变量:它们只能被设置在宏定义体内,而且只在宏内可见.一个局部变量的生存周期只是宏的调用过程.可以使用 local 指令在宏定义体内创建或替换局部变量. 循环变量:循环变量是由指令(如 list )自动创建的,而且它们只在指令的开始和结束标记内有效.宏的参数是局部变量而不是循环变量. 示例:使用 assig

freemarker 模板开发入门

数据模型 scalars标量:从根 root 开始指定它的路径,每级之间用点来分隔. 如:whatnot.fruits sequences 序列:使用数组的方括号方式来访问一个序列的子变量. 如:animals[0].name,whatnot.fruits[1] 总结: 数据模型可以被看做是树状结构的. 标量存储单一的值,这种类型的值可以是字符串,数字,日期/时间或者是布尔值. 哈希表是存储变量和与其相关且有唯一标识名称变量的容器. 序列是存储有序变量的容器.存储的变量可以通过数字索引来检索,索

freemarker 模板

1 总体结构 模板(FTL 编程)是由如下部分混合而成的: Text 文本:文本会照着原样来输出. Interpolation 插值:这部分的输出会被计算的值来替换.插值由${和}所分隔(或者#{和},这种风格已经不建议再使用了). FTL tags 标签:FTL 标签和 HTML 标签很相似,但是它们却是给 FreeMarker 的指示,而且不会打印在输出内容中. Comments 注释:FTL 的注释和 HTML 的注释也很相似,但它们是由<#--和-->来分隔的.注释会被 FreeMar

Spring Boot 揭秘与实战(七) 实用技术篇 - FreeMarker 模板引擎

文章目录 1. FreeMaker 代替 JSP 作为页面渲染 2. 生成静态文件 3. 扩展阅读 4. 源代码 Spring Boot 提供了很多模板引擎的支持,例如 FreeMarker.Thymeleaf.这篇,我们看下 Spring Boot 如何集成和使用 FreeMarker. Spring Boot 中使用 FreeMarker 模板非常简单方便.如果想要使用FreeMarker 模板引擎,首先,修改 POM 文件,添加依赖. FreeMaker 代替 JSP 作为页面渲染 <de

FreeMarker模板开发指南知识点梳理

freemarker是什么? 有什么用? 怎么用? (问得好,这些都是我想知道的问题) freemarker是什么? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件. 对于像我一样之前完全对freemarker没概念的来说,这种解释还是无法释疑解惑,需要说的再详尽点. freemarker有什么用? 模板编写

##Freemarker模板引擎的分享

网页静态化技术 -Freemarker 原因:在我们开发过程中,一般会大量的网页静态化部分的解决问题,例如新闻网站的那些静态新闻,再比如我们大型的电商项目,每个商品的详情页,都是一些静态资源,如果每次用户访问都要去数据库中访问,那么无疑会造成高并发的现象,而且造成资源的浪费. 技术:网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应用场景不同,缓存比较适合小规模的数据,而网页静态化比较适合大规模且相对变化不太频繁的数据.另外网页静态化还有利于SEO. 另外我们如果将网页以