代码之家  ›  专栏  ›  技术社区  ›  fhe

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

  •  4
  • fhe  · 技术社区  · 17 年前

    我目前正在用Ant构建脚本替换homebrewn构建脚本。

    现在,我需要根据特定文件的大小替换各种令牌。我知道如何通过 <length> 任务并存储在属性中,但我也需要以KB和MB为单位的大小。

    如何访问其他表示形式(KB、MB)中的文件大小,或从Ant目标中计算这些值并将其存储在属性中?

    编辑: 在我发现 <script> 任务中,使用一些JavaScript计算其他值并使用 project.setNewProperty("foo", "bar");

    2 回复  |  直到 17 年前
        1
  •  7
  •   martin clayton egrunin    15 年前

    我发现了一个解决方案,它不需要任何第三方库或使用 <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>
    
        2
  •  3
  •   Miserable Variable    17 年前

    学校有一项数学作业 http://ant-contrib.sourceforge.net/ 这可能有用