1

我定义了以下蚂蚁目标。这个想法是仅在文件夹的某些内容发生更改时才进行繁重的工作。

<target name="checksumAssets">
    <echo message="verify checksums" />

    <checksum todir="${bin.loc}/../checksums"  verifyproperty="checksum.isUpToDate.test">
        <fileset dir="${bin.loc}/assets/" id="filelist">
            <include name="somefolder/" />
            <exclude name="somefolder/result.swf"/>
        </fileset>
    </checksum>
    <echo message="${toString:filelist}"/>
    <echoproperties regex="checksum.isUpToDate.test"/>
</target>

<target name="createAsset" depends="checksumAssets" unless="${checksum.isUpToDate.test}">

    <!-- do create the assets and other magic -->

    <echo message="create checksum files" />
    <checksum todir="${bin.loc}/../checksums" >
        <fileset refid="filelist" />
    </checksum>
</target>

somefolder 包含将被处理并生成包含这些资产的 swf 文件的图像。

我希望仅在资产文件夹中的某些内容发生更改时才进行这种繁重的处理。

这在两种情况下有效:

  • 我将一个新文件添加到某个文件夹
  • 我更改某个文件夹中的现有文件

我的问题是:

  • 当我从此文件夹中删除文件时它不起作用。

ant createAsset这意味着,如果我从相关文件夹中删除文件,则不会调用 createAsset Target 。如果校验和文件夹中不存在校验和文件,则会在上述两种情况下调用它。

有什么我想念的吗?

蚂蚁版本是 1.8.2

4

1 回答 1

0

我找到了解决方法。

因为<checksum>只保存单个文件的校验和,所以它无法知道之前运行中是否缺少文件。为此,它需要将完整文件列表的校验和保存在磁盘上。

这就是我完成的:

<target name="checksumAssets">
    <echo message="verify checksums" />

    <!-- generate filelist.txt with actual content of somefolder -->
    <fileset dir="${bin.loc}/assets/somefolder/" id="filelist">
        <exclude name="result.swf"/>
        <exclude name="filelist.txt"/>
    </fileset>
    <concat destfile="${bin.loc}/assets/somefolder/filelist.txt" fixlastline="true">${toString:filelist}</concat>

    <!-- checksum folder including the filelist.txt -->
    <checksum todir="${bin.loc}/../checksums"  verifyproperty="checksum.isUpToDate.test">
        <fileset dir="${bin.loc}/assets/" id="checkedlist">
            <include name="somefolder/" />
            <exclude name="somefolder/result.swf"/>
        </fileset>
    </checksum>
</target>

<target name="createAsset" depends="checksumAssets" unless="${checksum.isUpToDate.test}">

    <!-- do create the assets and other magic -->

    <echo message="create checksum files" />
    <checksum todir="${bin.loc}/../checksums" >
        <fileset refid="checkedlist" />
    </checksum>
</target>
  • filelist.txt首先我用当前文件夹的内容生成一个。
  • 然后我生成此文件夹中所有文件的校验和,包括 filelist.txt

每次运行时,都会生成 filelist.txt,并与上次成功运行的 filelist.txt 进行检查createAsset

现在,createAsset如果内容文件更改或此文件夹的内容更改,则运行目标。

任务完成 ;)

于 2013-08-12T14:41:22.040 回答