构建之后,我需要修改一个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>
此代码无法移动到模板构建脚本中,因为replacetoken
和replacevalue
标记将文本视为文字 - 它们在我的ANT版本中不expandproperties
。
我想使用属性来定义"some link"
和MyTOKEN
值。
在"some link"
中使用属性的解决方法是使用filterchain
并在替换后复制文件:
<copy file="index.html" tofile="index2.html" >
<filterchain>
<!-- this converts the ${xxx} properties into their values -->
<expandproperties />
</filterchain>
</copy>
但是在replace
完成之后仍然有效 - 这意味着我仍然需要将MyTOKEN
值直接硬编码到构建脚本中。
更新:我应该使用replace
,copy
和filterreader
创建自己的filterchain
任务吗?我并没有真正理解这种方法,但看起来就是这样。
根据已接受的答案更新扩展:我最初使用的是<replacetoken>
&amp; <replacevalue>
方法,因为我需要跨越多行的值。
使用token
&amp; value
,我无法找到换行的方法。
放置换行符的解决方案是使用${line.separator}
作为换行符。请参阅Echo Task上的文档。
另外,这是一个更有用(非主题)ANT属性的页面:Built-in Ant Properties。
答案 0 :(得分:8)
使用token
和value
属性可以在此处运行。这适用于Ant 1.7.1:
build.properties
token=FOO
tokval=some ${token}
的build.xml
<project>
<property file="build.properties" />
<target name="repl">
<replace file="test.txt" token="${token}" value="${tokval}" />
</target>
</project>
希望有所帮助。
答案 1 :(得分: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>