【问题标题】:How to use size of file inside Ant target如何在 Ant 目标中使用文件大小
【发布时间】:2008-11-23 15:56:47
【问题描述】:

我目前正在用 Ant 构建脚本替换我的自制构建脚本。

现在我需要用特定文件的大小替换各种标记。我知道如何通过<length> 任务获取以字节为单位的大小并存储在一个属性中,但我也需要以千字节和兆字节为单位的大小。

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

编辑:在我发现 <script> 任务后,使用一些 JavaScript 计算其他值并使用 project.setNewProperty("foo", "bar"); 向项目添加新属性相当容易。

【问题讨论】:

  • 如果您可以发布您编写的脚本作为答案,那就太好了。
  • 其实是个好主意。我已经在下面发布了我的解决方案。

标签: java ant filesize


【解决方案1】:

我找到了一个不需要任何第三方库或使用 <script> task 的自定义任务的解决方案,它允许在 Ant 目标中使用 JavaScript(或任何其他 Apache BSFJSR 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>

【讨论】:

【解决方案2】:

http://ant-contrib.sourceforge.net/ 有一个数学任务可能有用

【讨论】:

  • 谢谢,但我找到了不需要额外库的解决方案。
  • 脚本当然是更好的方法,不知道 Ant 已经支持 beanshell。感谢您的信息。
猜你喜欢
  • 1970-01-01
  • 2011-06-22
  • 2012-11-08
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多