2008-11-23 17 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> 
相關問題