如何在 Ant 目标中使用文件大小
Posted
技术标签:
【中文标题】如何在 Ant 目标中使用文件大小【英文标题】:How to use size of file inside Ant target 【发布时间】:2008-11-23 15:56:47 【问题描述】:我目前正在用 Ant 构建脚本替换我的自制构建脚本。
现在我需要用特定文件的大小替换各种标记。我知道如何通过<length>
任务获取以字节为单位的大小并存储在一个属性中,但我也需要以千字节和兆字节为单位的大小。
如何以其他表示形式(KB、MB)访问文件大小或从 Ant 目标中计算这些值并将它们存储在属性中?
编辑:在我发现 <script>
任务后,使用一些 javascript 计算其他值并使用 project.setNewProperty("foo", "bar");
向项目添加新属性相当容易。
【问题讨论】:
如果您可以发布您编写的脚本作为答案,那就太好了。 其实是个好主意。我已经在下面发布了我的解决方案。 【参考方案1】:我找到了一个不需要任何第三方库或使用 <script>
task 的自定义任务的解决方案,它允许在 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>
【讨论】:
当 JavaScript 被移除时,我们有什么替代方案? openjdk.java.net/jeps/335【参考方案2】:http://ant-contrib.sourceforge.net/ 有一个数学任务可能有用
【讨论】:
谢谢,但我找到了不需要额外库的解决方案。 脚本当然是更好的方法,不知道 Ant 已经支持 beanshell。感谢您的信息。以上是关于如何在 Ant 目标中使用文件大小的主要内容,如果未能解决你的问题,请参考以下文章
使用ant和curl将工件上传到artifactory会导致服务器上出现空文件