2

src2 つのディレクトリがあります。それらを と と呼びましょうbuild。私のビルドシステムは、mtime が insrcよりも新しいすべてのファイルに対して、ファイルをtobuildにコピーし、いくつかの変換 (縮小、バージョン管理など) を行うように機能します。それ以外の場合、ファイルは最新であると見なされるためスキップします。srcbuid

ただし、ソース ファイルが削除されると、ビルドされたバージョンがまだ存在しbuild、後で生成されるマップ ファイルに含まれるため、問題が発生します。

$ ls src
example1.js
example2.js

$ ant do-the-stuff
...

$ ls build
example1.js
example1-12345.min.js
example2.js
example2-23456.min.js
.map

$ cat .map
example1.js=example1-12345.min.js
example2.js=example2-23456.min.js

$ rm src/example2.js
$ ant do-the-stuff
...

$ cat .map
example1.js=example1-12345.min.js
example2.js=example2-23456.min.js

Antで別のディレクトリに存在しないファイルを削除する方法はありますか? 集合論の観点からは、単純な A\B 操作です。

これは私がすでに試したものですが、うまくいきませんでした:

<delete dir="build">
    <exclude name="src/*" />
</delete>

<delete dir="build">
    <exclude>
        <fileset name="src" />
    </exclude>
</delete>

<delete dir="build">
    <fileset dir="build/*">
        <not>
            <present targetdir="src" />
        </not>
    </fileset>
</delete>
4

2 に答える 2

3

「Antを使用して別のディレクトリに存在しないファイルを削除する方法はありますか」
はい、presentselector、feを使用 してファイルセットで削除タスクを使用します

<fileset dir="/home/rosebud/temp/dir1" includes="*.jar" id="srcfileset">
 <present present="srconly" targetdir="/home/rosebud/temp/dir2"/>
</fileset>
<echo>Files only in /home/rosebud/temp/dir1 => ${toString:srcfileset}</echo>
<delete>
 <fileset refid="srcfileset"/>
</delete>


逆に使用するために /home/rosebud/temp/dir1 にのみ存在するすべてのファイルを削除します。

...
 <not>
  <present present="srconly" targetdir="/home/rosebud/temp/dir2"/>
 </not>
...

現在のセレクターを使用した別の例については、 https://stackoverflow.com/a/12847012/130683も参照してください

于 2012-11-09T21:25:53.220 に答える
0

Antにはタスクがdependあり、そのdependsetためです。

これらは、ソースが新しいターゲットを削除しますが、これで問題ないと思います。

この非常に具体的なケースでdependは、正しいもののようです。

例:

<depend srcdir="src" destdir="build"/>
于 2012-11-08T15:43:13.697 に答える