2

これは例で説明するのが最も簡単かもしれないと思うので、ここに行きます:

<target name="test">
    <fileset id="fileset" dir="target">
        <include name="*"/>
    </fileset>
    <echo>${toString:fileset}</echo>
    <touch file="target/test"/>
    <echo>${toString:fileset}</echo>
</target>

出力:

test:
     [echo] 
    [touch] Creating target/test
     [echo] test

私が理想的に望むのは、ファイルセットを同じままにして、前/後のセットを保持できるようにすることです(を使用して変更されたセットを取得するため、<difference>それにスキップする方法を知っている場合...)。

<filelist>代わりに使用してみましたが、これを正しく入力して<difference>タスクで比較することはできません (コンテンツを出力できないように見えるため、デバッグも困難です)。<modified/>また、ファイルセット内のファイルを選択するために使用しようとしましたが、まったく機能していないようで、常に何も返されません。

別のアプローチがあるとしても、上記の例で ANT が何をしているのか、またその理由をよりよく理解していただければ幸いです。

4

3 に答える 3

2

ファイルセットはセレクターのようなものです。これは、一連のファイルを取得できるようにする一連の「命令」(包含、除外、パターン)です。

ファイルセットで実際に何かを行うたびに(「参照」するファイルを印刷するなど)、実際のファイルのセットは、ファイルセットに含まれる「命令」に基づいて計算されます。

于 2012-09-14T15:07:39.413 に答える
2

パスセレクターはオンザフライで評価されます。ファイルを追加すると、使用時にセットに反映されます。

pathconvertを使用して、変数を評価して保持できる場合があります。次に、これを pathtofilest を使用してfilestに戻すことができます

于 2012-09-15T04:45:45.853 に答える
1

ジャヤンが指摘したように、最終結果を回答として投稿する価値があるかもしれないので、重要な部分を簡略化したバージョンを次に示します。

<fileset id="files" dir="${target.dir}"/>
<pathconvert property="before.files" pathsep=",">
    <fileset refid="files"/>
</pathconvert>
<!-- Other Ant code changes the file-system. -->
<pathconvert property="after.files" pathsep=",">
    <fileset refid="files"/>
</pathconvert>
<filelist id="before.files" files="${before.files}"/>
<filelist id="after.files" files="${after.files}"/>
<difference id="changed.files">
    <filelist refid="before.files"/>
    <filelist refid="after.files"/>
</difference>
于 2012-09-18T08:42:51.693 に答える