今回は、Antのjavacタスクで使用するソースファイル/クラスファイルのフォルダ指定についてです。
TFSでビルドを実行すると、指定された状態(通常は最新バージョン)のファイルを自動的に取得します。取得先は、ビルドエージェント作成時に作業ディレクトリに指定したフォルダになります。
クラスファイルなどのビルド生成ファイルの出力先についてはいろいろ考えがあると思いますが、今回はTFSのビルド結果出力フォルダに出力したいと思います。
javacタスクでは、ソースファイルのフォルダは「srcdir」属性、クラスファイルの出力先フォルダは「destdir」属性で指定できますが、この内容をTFSで使用するフォルダと連動させます。
実は、MSBuildからAntを実行する際に、TFSBuild.projでTFSで使用する情報の一部がプロパティとしてセットされています。
デフォルトでセットされているのは以下の情報です。
BinariesRoot
BuildDefinitionName
BuildDefinitionUri
BuildDirectory
BuildNumber
DropLocation
LogLocation
SourceGetVersion
TestResultsRoot
TeamProject
WorkspaceName
WorkspaceOwner
各項目の内容については、MSDNのTeam Foundation ビルド アクティビティ、またはIBuildDetail Propertiesに記載されています。
但し、「LogLocation」はなぜかセットされていません。(今回、これが結構痛いです)
この情報を組み合わせてソースファイル/クラスファイルのフォルダ指定を行いたいのですが、Javaプロジェクト名はTFS側では管理されていないので、MSBuildの引数に追加し、Antに渡すプロパティ情報にも追加します。
以下の内容で「JavaProjectName」というプロパティ指定をTFSBuild.projに追加し、修正内容をチェックインします。
TFSビルド定義の方は、MSBuildの引数に「JavaProjectName」を追加し、保存します。
次に、EclipseからBuild.xmlを以下のように変更し、チェックインします。
変更内容は
・javacタスクのsrcdir属性に指定するソースフォルダをsrcbaseプロパティとして組み立てる。
・javacタスクのdestdir属性に指定するクラスファイル出力フォルダdestbaseプロパティとして組み立てる。
・destbaseプロパティにセットしたフォルダをjavacタスク実行前に作成する
になっています。
※クラスファイルの出力先がTFSのビルド結果出力フォルダになっていませんが、TFSのビルドが完了したときに、「${BuildDirectory}/binaries」配下の内容がTFSのビルド結果出力フォルダにコピーされます。
これで、Eclipseからビルドを実行すると、.classファイルがTFSのビルド結果出力フォルダに出力されます。
次は、ソースファイルの静的解析ツールであるFindBugsをビルド時に実行してみます。