Как использовать размер файла внутри цели Ant - PullRequest
5 голосов
/ 23 ноября 2008

Я сейчас нахожусь в процессе замены моего собственного сценария сборки на сценарий сборки Ant.

Теперь мне нужно заменить различные токены размером определенного файла. Я знаю, как получить размер в байтах с помощью задачи <length> и сохранить его в свойстве, но мне также нужен размер в килобайтах и ​​мегабайтах.

Как получить доступ к размеру файла в других представлениях (КБ, МБ) или вычислить эти значения из целевого объекта Ant и сохранить их в свойстве?

Редактировать: После того, как я обнаружил задачу <script>, было довольно легко вычислить другие значения с помощью некоторого JavaScript и добавить новое свойство в проект, используя project.setNewProperty("foo", "bar");.

Ответы [ 2 ]

6 голосов
/ 28 ноября 2008

Я нашел решение, которое не требует какой-либо сторонней библиотеки или пользовательских задач, используя задачу <script> , которая позволяет использовать 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>
3 голосов
/ 23 ноября 2008

На http://ant -contrib.sourceforge.net / есть математическая задача, которая может быть полезна

...