3

私は他の誰かから継承した(もう利用できない)大きなAntスクリプト(> 1000行)に取り組んでいます。Antがディレクトリを削除しないという問題があります。スクリプトのある時点では機能しますが、別の時点では機能しません。Antはエラーメッセージを表示しませんが、ディレクトリをそのままにします。

ディレクトリの存在を確認するために、その周りにいくつかのグルーヴィーを配置しました。

  <groovy>
    println("Directories in @{outFolder} are:")
    new File("@{outFolder}").eachDir() { dir -> println dir.getName() }
  </groovy>
  <delete verbose="true" includeEmptyDirs="true" >
    <dirset dir="@{outFolder}" includes="**/*" />
  </delete>
  <echo>End of delete</echo>
  <groovy>
    println("Directories in @{outFolder} are:")
    new File("@{outFolder}").eachDir() { dir -> println dir.getName() }
  </groovy>

したがって、行が呼び出され、機能します。次に、他のアプリが呼び出され、新しいディレクトリが作成されます。まったく同じ行が再度呼び出されますが(コピーアンドペースト、はい、同じです)、ディレクトリは削除されません。また、エラーはありません。Antは実行を続けます。Windows Server2008R2でAnt1.8.1を使用しています。ロックの問題を防ぐために、スリープを追加してみました。ディレクトリを作成するアプリはJavaアプリ(Tibco appManage)です。ディレクトリにはXMLファイルが含まれ、jarファイルは含まれません。ANT_HOMEとCLASSPATHを確認しました。問題はありません。何が恋しいですか?

スマートロバの場合:もちろん、2回目の削除では、アプリによって作成されたすべてのものを削除する必要はありませんが、問題を特定するために、スクリプト行をできるだけ単純にしました。

さらに詳しい情報:削除を機能させることができないため、回避策としてAntmoveを使用しようとしました。これは私が見ているものです:移動は宛先に空のディレクトリを作成し、ソースからファイルやディレクトリを削除せず、エラーを報告しません。これらのソースディレクトリ/ファイル(以前に削除しようとしたもの)に問題があるようです。

別の試み:AntとGroovyの最新バージョンをダウンロードしました。同じ結果。

4

1 に答える 1

4

dirsetを使用しています。ファイルセットを使用します。

説明:dirsetは、あなたが思っているものではありません。ほとんどの場合、ファイルセットを使用します。

初めて、ディレクトリが空であるため、動作しています。2回目は、そうではありません。これ<dirset>は、にディレクトリオブジェクト自体が含まれているが、その中にファイルが含まれておらず、削除タスクで「includeEmptyDirs」を使用しているためです。これは、ディレクトリセットでは意味がありません。

このような架空のツリーでは、次のようになります。

top/
  sub1/
    file.txt
  sub2/ (empty)

...dirsetコレクションはtop/、top / sub1 /、およびtop / sub2 /を選択しますが、top / sub1 /file.txtは選択しません。コレクションに<delete>作用し、空でないディレクトリを削除しません。したがって、上記の場合、top / sub2(空)は削除されますが、top/sub1またはtop/は削除されません。これはまた、あなたの試みの結果をあなたに説明するはずであり<move>、それはあなたにdirsetが実際に役立つことができるケースのいくつかのアイデアをあなたに与えるでしょう。

ファイルセットには、ファイルとディレクトリが含まれます。

于 2012-04-11T06:47:43.977 に答える