2008-11-23 15 views
4

我目前正在用Ant构建脚本替换我的homebrewn构建脚本。如何在Ant目标中使用文件大小

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

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

编辑:后,我发现了<script>的任务,这是很容易计算使用一些JavaScript的其他值和一个新的属性添加到使用project.setNewProperty("foo", "bar");项目。

+0

如果您可以发布您编写的脚本作为答案,那将会很好。 – 2008-11-24 17:24:47

+0

其实是一个好主意。我已在下面发布我的解决方案。 – fhe 2008-11-28 20:01:59

回答

6

我发现,不使用,允许使用JavaScript <script> task(或任何其他Apache BSFJSR 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> 
相关问题