我目前正在用Ant构建脚本替换我的homebrewn构建脚本。
现在我需要用特定文件的大小替换各种令牌。我知道如何通过<length>
任务获取大小(以字节为单位)并存储在属性中,但我需要以千字节和兆字节为单位的大小。
如何在其他表示形式(KB,MB)中访问文件大小或从Ant目标中计算这些值并将它们存储在属性中?
编辑:在我发现<script>
任务后,使用某些JavaScript计算其他值并使用project.setNewProperty("foo", "bar");
向项目添加新属性相当容易。
答案 0 :(得分:6)
我找到了一个不需要使用<script>
task的任何第三方库或自定义任务的解决方案,允许使用JavaScript(或任何其他Apache BSF或JSR 223支持的语言)在Ant目标中。
<target name="insert-filesize">
<length file="${afile}" property="fs.length.bytes" />
<script language="javascript">
<![CDATA[
var length_bytes = project.getProperty("fs.length.bytes");
var length_kbytes = Math.round((length_bytes / 1024) * Math.pow(10,2))
/ Math.pow(10,2);
var length_mbytes = Math.round((length_kbytes / 1024) * Math.pow(10,2))
/ Math.pow(10,2);
project.setNewProperty("fs.length.kb", length_kbytes);
project.setNewProperty("fs.length.mb", length_mbytes);
]]>
</script>
<copy todir="${target.dir}">
<fileset dir="${source.dir}">
<include name="**/*" />
<exclude name="**/*.zip" />
</fileset>
<filterset begintoken="$$$$" endtoken="$$$$">
<filter token="SIZEBYTES" value="${fs.length.bytes}"/>
<filter token="SIZEKILOBYTES" value="${fs.length.kb}"/>
<filter token="SIZEMEGABYTES" value="${fs.length.mb}"/>
</filterset>
</copy>
</target>
答案 1 :(得分:3)
http://ant-contrib.sourceforge.net/处的数学任务可能很有用