6

构建后,我需要修改一个 HTML 文件,指向客户端下载新应用程序。

我搜索令牌;用链接和令牌替换它:

<replace file="index.html" >

    <!-- this searches for literal text ${MyTOKEN} -->
    <!-- does not "expand" ${MyTOKEN} before searching -->
    <replacetoken>${MyTOKEN}</replacetoken>

    <replacevalue>"some link" <br> ${MyTOKEN}</replacevalue>
</replace>

此代码不能移动到模板构建脚本中,因为replacetokenandreplacevalue标记将文本作为文字 - 它们不在expandproperties我的 ANT 版本中。

我想使用属性来定义"some link"MyTOKEN值。


使用属性的解决方法"some link"是使用 afilterchain并在替换后复制文件:

<copy file="index.html" tofile="index2.html" >
    <filterchain>
        <!-- this converts the ${xxx} properties into their values -->
        <expandproperties />
    </filterchain>
</copy>

但这replace在完成之后才有效 - 所以这意味着我仍然需要将MyTOKEN值直接硬编码到构建脚本中。

  • 我想在构建脚本之外定义我的令牌,并在构建脚本中引用它
  • 我怎么做?

更新:我应该使用和创建自己的任务replace吗?我不太理解这种方法,但它看起来像这样。copyfilterreaderfilterchain


更新扩展接受的答案:我最初使用<replacetoken>&<replacevalue>方法,因为我需要我的值跨越多行。

通过使用token& value,我无法找到换行的方法。

放置换行符的解决方案是${line.separator}用作换行符。请参阅Echo Task上的文档。

另外,这里是一些更有用(离题)的 ANT 属性的页面:内置 Ant 属性

4

2 回答 2

8

使用tokenandvalue属性在这里有效。这适用于我的 Ant 1.7.1:

build.properties

token=FOO
tokval=some ${token}

构建.xml

<project>
  <property file="build.properties" />
  <target name="repl">
    <replace file="test.txt" token="${token}" value="${tokval}" />
  </target>
</project>

希望有帮助。

于 2012-06-14T07:46:13.533 回答
0

您可以使用属性需要去的标记进行多行替换:@__relative_url_to_doc_root__@

     <replace dir="${dir_build_docs_javadoc}">
        <replacetoken><![CDATA[</head>]]></replacetoken>
       <replacevalue><![CDATA[<meta name="viewport" content="width=device-width"/>
<!-- Required for syntax highlighting (1/2)...START -->
  <script type="text/javascript" src="@__relative_url_to_doc_root__@resources/shCore.js"></script>
  <link href="@__relative_url_to_doc_root__@resources/shCore.css" rel="stylesheet" type="text/css"/>
  <link href="@__relative_url_to_doc_root__@resources/shThemeDefault.css" rel="stylesheet" type="text/css"/>
  <script type="text/javascript" src="@__relative_url_to_doc_root__@resources/shBrushJava.js"></script>
<!-- Required for syntax highlighting (1/2)...END -->
</HEAD>]]></replacevalue>
     </replace>

然后对属性运行另一个单行替换:

<target name="-replace_all_javadoc_headers">
   <antcall target="-javadoc_replace_headers_in_one_dir">
     <param name="directory_to_replace" value="${dir_build_docs_javadoc}"/>
     <param name="relative_url_to_doc_root" value=""/>
   </antcall>
   <antcall target="-javadoc_replace_headers_in_one_dir">
     <param name="directory_to_replace" value="${dir_build_docs_javadoc}${cg_xbn_codelet}"/>
     <param name="relative_url_to_doc_root" value="../../../../"/>
   </antcall>
   <antcall target="-javadoc_replace_headers_in_one_dir">
     <param name="directory_to_replace" value="${dir_build_docs_javadoc}${cg_xbn_codelet}type${fs}"/>
     <param name="relative_url_to_doc_root" value="../../../../../"/>
   </antcall>
   <antcall target="-javadoc_replace_headers_in_one_dir">
     <param name="directory_to_replace" value="${dir_build_docs_javadoc}${cg_xbn_codelet}taglet${fs}"/>
     <param name="relative_url_to_doc_root" value="../../../../../"/>
   </antcall>
</target>

<target name="-javadoc_replace_headers_in_one_dir">
  <replace dir="${directory_to_replace}" 
        token="@__relative_url_to_doc_root__@" 
        value="${relative_url_to_doc_root}">
     <include name="*.html"/>
  </replace>

于 2014-05-11T02:20:12.063 回答