• 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模板文件不会被复制到最终的打包文件中。

     
  • 相关阅读:
    Node 之http模块
    Node 之 模块加载原理与加载方式
    Node 之NPM介绍
    Node.js的特点
    ECMAScript 6 简介
    Node 之URL模块
    用户模块 之 根据条件查询用户
    用户模块 之 完成用户列表的分页显示
    用户模块 之 完成查询所有帖子、完成查询所有回复以及点赞
    用户模块 之 完成查询所有用户
  • 原文地址:https://www.cnblogs.com/zrbfree/p/6216345.html
Copyright © 2020-2023  润新知