1

次の ant ターゲットが定義されています。アイデアは、フォルダーの内容が変更された場合にのみ、重い作業を行うことです。

<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 ファイルになります。

アセットフォルダー内の何かが変更された場合にのみ、この重い処理が行われるようにします。

これは、次の 2 つの場合に見られるように機能します。

  • 私はいくつかのフォルダに新しいファイルを追加します
  • どこかのフォルダにある既存のファイルを変更します

私の問題は:

  • このフォルダからファイルを削除すると機能しません。

ant createAssetこれは、問題のフォルダーからファイルを削除すると、createAsset ターゲットが呼び出されないことを意味します。前述の 2 つの場合と、checksums フォルダーにチェックサム ファイルが存在しない場合に呼び出されます。

私が逃したものはありますか?

アリのバージョンは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 に答える