问题:
项目中有一些配置文件中,在部署时需要根据文件的物理目录,使用ant的copy命令中的filter自动替换,而filter.取得文件当前的物理路径使用的是 basedir=".",在windows环境下,目录的路径分隔符自动解析成"\",需要在替换配置时把"\"改成"/"
解决:
ant有replace命令,但是却没有发现可以在执行命令时动态改变ant属性和过滤属性的能力,于是在网友[url=http://www.someok.com/]郁也风[/url]的提示下,使用javascript脚本来完成这个任务.
环境: eclipse(workshop studio),ant1.6.5
步骤:
1.ant支持javascript脚本需要如下几个包: [url=http://jakarta.apache.org/bsf/]bsf.jar[/url], [url=http://www.mozilla.org/rhino/]js.jar[/url],log4j.jar,commons-logging.jar,他们的作用,就不多说了
2.原ant的build.xml里是这么写的:
[code]
<project name="**" default="usage" basedir=".">
<property name="build.dir" value="${basedir}/work"/>
<filter token="build.dir" value="${build.dir}"/>
<target name="copy" depends="**">
<copy todir="${build.dir}/etc" filtering="yes" overwrite="${filter.overwrite}">
<fileset dir="etc">
<include name="**/*"/>
<exclude name="**/*.gif"/>
<exclude name="**/*.jpg"/>
<exclude name="**/*.png"/>
</fileset>
</copy>
</target>
</project>
[/code]
3.把原build.xml中的filter去掉,在此任务中加入:
[code]
<script language="javascript">
<![CDATA[
project.addFilter("build.dir",project.getProperty("build.dir").replace("\\", "/"));
]]>
</script>
[/code]
这样在copy的时候,此filter的内容就换过来了.
项目中有一些配置文件中,在部署时需要根据文件的物理目录,使用ant的copy命令中的filter自动替换,而filter.取得文件当前的物理路径使用的是 basedir=".",在windows环境下,目录的路径分隔符自动解析成"\",需要在替换配置时把"\"改成"/"
解决:
ant有replace命令,但是却没有发现可以在执行命令时动态改变ant属性和过滤属性的能力,于是在网友[url=http://www.someok.com/]郁也风[/url]的提示下,使用javascript脚本来完成这个任务.
环境: eclipse(workshop studio),ant1.6.5
步骤:
1.ant支持javascript脚本需要如下几个包: [url=http://jakarta.apache.org/bsf/]bsf.jar[/url], [url=http://www.mozilla.org/rhino/]js.jar[/url],log4j.jar,commons-logging.jar,他们的作用,就不多说了
2.原ant的build.xml里是这么写的:
[code]
<project name="**" default="usage" basedir=".">
<property name="build.dir" value="${basedir}/work"/>
<filter token="build.dir" value="${build.dir}"/>
<target name="copy" depends="**">
<copy todir="${build.dir}/etc" filtering="yes" overwrite="${filter.overwrite}">
<fileset dir="etc">
<include name="**/*"/>
<exclude name="**/*.gif"/>
<exclude name="**/*.jpg"/>
<exclude name="**/*.png"/>
</fileset>
</copy>
</target>
</project>
[/code]
3.把原build.xml中的filter去掉,在此任务中加入:
[code]
<script language="javascript">
<![CDATA[
project.addFilter("build.dir",project.getProperty("build.dir").replace("\\", "/"));
]]>
</script>
[/code]
这样在copy的时候,此filter的内容就换过来了.