8

私が持っている ANT ビルド スクリプトは、次のことを行います。

  1. Windows サーバーでビルドを実行し、バイナリを圧縮します
  2. を使用して、異なる資格情報を持つネットワーク ドライブをローカル ドライブ (例: P:) にマップします。net use
  3. マウントされたドライブにディレクトリを作成するために使用<mkdir>しています(P :)
  4. バイナリをそのドライブにコピーします

以下は私のコードですmkdir

<echo>Creating ${buildRequesterUserId} folder at mirroring site starts</echo>
<mkdir dir="P:\build_output\${buildRequesterUserId}"/>
<echo>Creating ${buildRequesterUserId} folder at mirroring site ends</echo>

フォルダの作成が機能する場合と、以下のエラーで失敗する場合があります

creation was not successful for an unknown reasonそしてビルドを失敗させます

このエラーはランダムに発生します。Mkdir はしばらく動作します。失敗する理由がわかりません。ネットワークの遅延が原因かどうかもわかりません

また、作成しようとしているディレクトリが既に存在する場合と存在しない場合があります。ディレクトリが既に存在する場合、mkdirは何もしないことを読みました

確認したfailonerrorところ、mkdir はありません。これが原因でビルドが失敗することは望ましくありません。

エラーをcopy部分的に処理しましたが、これを処理する方法がわかりませんmkdir

どうすればこれを達成できますか?どんな助けでもいただければ幸いです

よろしく

カーシック

4

5 に答える 5

2

Apache Antタスクは、競合状態に対して脆弱なメソッドをMkdir呼び出しています。File.mkdirs()

File.mkdirs()mkdirアトミック操作ではありません-一連の呼び出しとして実装されていると思います。

リモートファイルシステムの場合、ホストがFile.mkdirs()操作中にファイルシステムの変更を認識して失敗する可能性が高くなります。

Mkdirコードが1.8.0でこれから変更されたため、Antはそれを修正しようとしたようです

boolean result = mkdirs(dir);
if (!result) {
  String msg = "Directory " + dir.getAbsolutePath()
         + " creation was not successful for an unknown reason";
  throw new BuildException(msg, getLocation());
}

1.8.2でこれに

boolean result = mkdirs(dir);
if (!result) {
  if (dir.exists()) {
    log("A different process or task has already created "
         + "dir " + dir.getAbsolutePath(),
         Project.MSG_VERBOSE);
    return;
  }
  String msg = "Directory " + dir.getAbsolutePath()
         + " creation was not successful for an unknown reason";
  throw new BuildException(msg, getLocation());
}

最新の Ant にアップグレードすると役立つのではないでしょうか?

そうでない場合は、独自のメソッド実装を使用してブルート フォースMkdirタスク拡張を作成できます。execute()

そうでない場合 - Ant Contrib からのTrycatch タスクが機能します。

于 2012-02-15T09:58:45.387 に答える
0

COPY タスクを使用して、ディレクトリ (サブディレクトリを含む) を作成できます。

于 2014-10-08T12:16:14.360 に答える
-4

これが私がそれを解決した方法です:

  1. build.properties ファイルを開きます (実際には、build.xml から参照されているすべてのプロパティ ファイルを開きます)。
  2. ファイルの任意の行で、末尾のスペースとタブを確認します。
  3. ファイルの末尾に空白行を追加します。
于 2013-04-14T12:02:36.190 に答える