使用NAnt filterchain实例化多个模板文件

时间:2011-11-07 09:07:30

标签: nant

我有一组模板文件,如

<!-- @TEMPLATE@ -->
<!-- @DONOTEDIT@ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SuperDuper @VARIANT@</title>
</head>
<body>
...
  @PRODUCTCODENAME@
...
</body>

我想使用NAnt进行部署,以便实例化嵌入的关键字,如

<target name="deployTemplates">
  <property name="_buildstamp" value="${DestDir}/templates_buildstamp"/>
  <uptodate property="_uptodate" verbose="${Verbose}">
    <sourcefiles basedir="${TemplateDir}">
      <include name="**"/>
    </sourcefiles>
    <targetfiles>
      <include name="${_buildstamp}"/>
    </targetfiles>
  </uptodate>
  <if test="${not _uptodate}">
    <copy todir="${CourseDestDir}" verbose="${Verbose}" overwrite="True">
      <!-- Have to specify the fileset again to maintain directory structure. -->
      <fileset basedir="${TemplateDir}">
        <include name="**"/>
      </fileset>
      <filterchain>
        <replacetokens>
          <token key="DONOTEDIT" value="Do not edit, will be overwritten."/>
          <token key="PRODUCTCODENAME" value="${Product}"/>
          <token key="VARIANT" value="${Variant}"/>
        </replacetokens>
      </filterchain>
    </copy>
    <touch file="${_buildstamp}"/>
  </if>
</target>

但是如何在每个部署的文件中嵌入单个模板文件的名称,也就是说,将@ TEMPLATE @替换为模板文件的位置,以便其他人知道在哪里进行永久性更改?

1 个答案:

答案 0 :(得分:0)

查看NAnt source code<filterchain>文档 - 您必须实现自定义Filter,这使得当前文件名可用于替换。 existing filters不会公开此信息。