6

現在、自作のビルド スクリプトを Ant ビルド スクリプトに置き換える作業を行っています。

ここで、さまざまなトークンを特定のファイルのサイズに置き換える必要があります。タスクを介してサイズをバイト単位で取得し、プロパティに格納する方法は知っています<length>が、キロバイト単位とメガバイト単位のサイズも必要です。

他の表現 (KB、MB) でファイル サイズにアクセスしたり、Ant ターゲット内からこれらの値を計算してプロパティに格納したりするにはどうすればよいですか?

編集:タスクを発見した後<script>、JavaScript を使用して他の値を計算し、 を使用してプロジェクトに新しいプロパティを追加するのはかなり簡単でしたproject.setNewProperty("foo", "bar");

4

2 に答える 2

7

Ant ターゲット内からJavaScript (またはその他のApache BSFまたはJSR 223がサポートする言語) を使用できるようにする<script>タスクを使用して、サードパーティのライブラリやカスタム タスクを必要としないソリューションを見つけました。

<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>
于 2008-11-28T20:00:17.277 に答える
3

http://ant-contrib.sourceforge.net/に役立つ数学タスクがあります。

于 2008-11-23T16:03:23.353 に答える