解答例 - 3.データ構造
(実習課題1)
まず、このファイル(Project.tar.gz)をダウンロードして作業ディレクトリに展開して下さい。展開するとProjectディレクトリが生成されます(展開されたファイルの中身はすべて空ですのでコンパイル等は行えません)。
このプロジェクトにはサーバ用のプログラムとクライアント用のプログラムが存在し、それぞれserverディレクトリとclientディレクトリにソースなどの関連ファイルが置かれています。ソースを編集したりコンパイルしたりしているうちにいろいろと副次的なファイルができてきたので、それらを削除する処理をAntで作成しようと考えました。
そこで、次の処理を行うビルドファイル(build.xml)をProjectディレクトリ直下に作成してください。
- 以下の条件を満たすパターンセットを単独で定義すること。すべて任意の深さのもの対象とする。
- すべてのクラスファイル(ファイル名が「.class」で終わるファイル)を含む。
- emacsのバックアップファイル(ファイル名が「~」で終わるファイル)を含む。
- ファイル名が「Test」で始まるファイル含む。ただしJavaソースファイル(ファイル名が「.java」で終わるファイル)は除外する。
- 定義するターゲットは以下の3つ。 なお削除処理では前項で定義したパターンセットを利用すること。
- clean-client clientディレクトリ以下の削除対象ファイルを削除する。
- clean-server serverディレクトリ以下の削除対象ファイルを削除する。
- clean clean-clientとclean-server両方のターゲットを実行する。
- デフォルトターゲットはcleanターゲットとする。
解答例
<?xml version="1.0" encoding="Windows-31J"?> <!-- * build.xml * TECHSCORE Java Ant 3章 実習課題 * * Copyright (c) 2004 Four-Dimensional Data, Inc. --> <project name="theme2" default="clean" basedir="."> <!--ディレクトリ名のプロパティ --> <property name="all" value="." /> <property name="client" value="client" /> <property name="server" value="server" /> <!--パターン--> <patternset id="deletefiles"> <include name="**/*.class" /> <include name="**/*~" /> <include name="**/Test*" /> <exclude name="**/*.java" /> </patternset> <!--clientディレクトリ削除 --> <target name="clean-client" > <echo message="CLEAN-TYPE = client"/> <delete> <fileset dir="${client}" defaultexcludes="no" > <patternset refid="deletefiles"/> </fileset> </delete> </target> <!--serverディレクトリ削除 --> <target name="clean-server" > <echo message="CLEAN-TYPE = server"/> <delete> <fileset dir="${server}" defaultexcludes="no" > <patternset refid="deletefiles"/> </fileset> </delete> </target> <!--client/serverディレクトリ削除 --> <target name="clean" depends="clean-client,clean-server"> <echo message="CLEAN-TYPE = all"/> </target> </project>