Pergunta

Eu estou atualmente no processo de substituir o meu script de construção homebrewn por um script de construção Ant.

Agora eu preciso para substituir várias fichas com o tamanho de um arquivo específico. Eu sei como obter o tamanho em bytes via a tarefa <length> e armazenar em em uma propriedade, mas eu preciso o tamanho em kilobytes e megabytes também.

Como posso acessar o tamanho do arquivo em outras representações (KB, MB) ou calcular esses valores a partir de dentro o alvo Ant e armazená-los em uma propriedade?

Editar:. Depois que descobri a tarefa <script>, foi bastante fácil de calcular os outros valores usando algum JavaScript e adicionar uma nova propriedade para o projeto usando project.setNewProperty("foo", "bar");

Foi útil?

Solução

Eu encontrei uma solução que não requer quaisquer tarefas de biblioteca ou personalizados de terceiros usando o <script> tarefa que permite o uso de JavaScript (ou qualquer outro Apache BSF ou JSR 223 apoiada idioma) de dentro de um alvo 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>

Outras dicas

Não é uma tarefa matemática em http://ant-contrib.sourceforge.net/ que pode ser útil

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top