如何在Ant目标中使用文件大小

我目前正在用Ant构建脚本替换我的homebrewn构建脚本。 现在我需要用特定文件的大小替换各种标记。我知道如何通过
<length>
任务获取大小(以字节为单位)并存储在属性中,但我需要以千字节和兆字节为单位的大小。 如何在其他表示形式(KB,MB)中访问文件大小或从Ant目标中计算这些值并将它们存储在属性中? 编辑:在我发现
<script>
任务之后,使用一些JavaScript计算其他值并使用
project.setNewProperty("foo", "bar");
为项目添加新属性相当容易。     
已邀请:
我找到了一个解决方案,它不需要任何使用
<script>
任务的第三方库或自定义任务,允许在Ant目标中使用JavaScript(或任何其他Apache BSF或JSR 223支持的语言)。
<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>
    
http://ant-contrib.sourceforge.net/上有一个数学任务可能很有用     

要回复问题请先登录注册