私の会社は、Visual Source Safe から Subversion に移行しています。当社のパイプライン管理ツールは、コードをバージョン管理からさまざまなテスト環境に移動するために、VSS が提供する「シャドウ フォルダー」の存在に依存しています。注: インタープリター型言語を使用し、ソース コードをオブジェクト コードに変換します。現在、ソース コードとオブジェクト コードの両方がバージョン管理下にあります (特にパイプライン管理機構のニーズのため)。
繰り返しのステップとして、Subversion にソース コードとオブジェクト コードの両方を保存する必要がないように、コミット時に翻訳を開始するという点で、シャドウ フォルダー機能を少し工夫して模倣しようとしています。注: コミット中に影響を受けるファイルを変換するためだけに、すべてのクリーンな「ビルド」を実行するプロセスをハックする必要がありました。このプロセスは、少しインタラクティブ性の低いもの (時間ごとのビルドなど) を優先します)。
この裏話はすべて、単に質問をするだけです: ${user.dir} プロパティはどのように設定されるのですか?
これは私のコミット後のフック バッチ ファイルです (すべて Windows で実行されます)。
SET REPO=%1
SET REV=%2
FOR %%* IN (%REPO%) DO SET REPONAME=%%~n*
SET BUILDROOT=E:\builds
IF NOT EXIST %BUILDROOT% ( MKDIR %BUILDROOT% )
SET BUILDDIR=%BUILDROOT%\%REPONAME%
IF NOT EXIST %BUILDDIR% ( MKDIR %BUILDDIR% )
CD %BUILDDIR%
ECHO %CD%
ECHO %BUILDDIR%
C:\apache-ant-1.8.3\bin\ant -f C:\dev\shadow\build.xml -DWorkingDir=%BUILDDIR%\!build_work_dir -DSvnRepoUrl=file:///%REPO% -DFromRevision=%REV% > %BUILDDIR%\!last_build_result.txt 2>&1
最後の行は実際の Ant 呼び出しです。%BUILDDIR% または E:\builds\ にあるファイルに出力をリダイレクトしていることがわかります。このファイルは期待どおりに作成されます。これは、 %BUILDDIR% が正しくセットアップされていることを示しているため、次のようになります。
CD %BUILDDIR%
行が実行されているはずです。SVN が空の environmentで post-commit フックを開始することは理解していますが、その中のディレクトリを変更すると、Ant が開始されると状態が保持されるはずです。
その後、Ant スクリプトで ${build.dir} プロパティを次のように設定します。
<property name="build.dir" value="${user.dir}\.build.${build.time}" />
<!-- delete the build.dir, just in case we attempt a new build within the same minute...
TODO: we may need to account for concurrent builds; does SVN single-thread commits? -->
<delete dir="${build.dir}" />
<mkdir dir="${build.dir}" />
%REPONAME% (バッチ ファイル内) が DEMO の場合、現在の作業ディレクトリは E:\builds\DEMO であると予想したため、${build.dir} は E:\builds\DEMO.build のようになります。 20120622.1127 ですが、代わりに C:\dev\shadow.build.20120622.1127 です。
私が理解しているように、Ant は単に${user.dir} のようなもののために Java からSystem.Propertiesを取得しています - ${user.dir} はUser's current working directoryとして記述されています。明らかに、私の実験に基づいて、バッチ ファイル内の初期セットアップと作業ディレクトリに関する Java の呼び出しの間で何かが交差しています。
Ant は作業ディレクトリをビルド ファイルの場所に変更しますか? それを示唆するドキュメントは見つかりませんでしたが、単に何かを見落としている可能性があります。%ANT_HOME% を定義しましたが、Subversion の「空の環境」を考えると、ロードされません...おそらく影響がありますか? 調査する必要がありますが、誰かがこれがどのように機能するかを簡単に知っていることを望んでいました.
編集 (2012-06-22-16:38):
%ANT_HOME%、%JAVA_HOME%、および %JAVA_CMD% をセットアップしようとしましたが、役に立ちませんでした。