プロジェクトテンプレート②

build.properties、build.xmlはこんな感じ。

build.propertiesで定義情報を変更できるようにしておく。
build.xmlに全ての処理を書いてしまうと、冗長になってメンテが大変なので、
カバレッジ取得や静的解析のタスクは、別XMLに分離して呼び出す形式にした。


Ant:http://ant.apache.org/


※March 7, 2013 - Apache Ant 1.9.0 Released
 最近バージョンアップしたみたい。ちょっと嬉しい^^
 「Apache Ivy」というのもできてる。
 ANTの改良版? 今度触ってみよう。


■build.properties

###################################################
# ディレクトリ定義
###################################################
# ソースファイル格納ディレクトリ
src.dir=src
# テストソースファイル格納ディレクトリ
test.dir=test
# スタブソース格納ディレクトリ
stub.dir=stub
# クラスファイル格納ディレクトリ
class.dir=bin
# ライブラリ格納ディレクトリ
lib.dir=lib
# テスト用ライブラリ格納ディレクトリ
test.lib.dir=testlib
# JARファイル格納ディレクトリ
jar.dir=jar
# JavaDoc格納ディレクトリ
javadoc.dir=javadoc
# 設定ファイル格納ディレクトリ
conf.dir=conf
# 画像ファイル格納ディレクトリ
img.dir=img
# テスト結果ファイル格納ディレクトリ
report.dir=report
# コード解析結果ファイル格納ディレクトリ
codeAnalysis.dir=codeAnalysis

###################################################
# ファイル定義
###################################################
# JARファイル名
jar.name=sample.jar

###################################################
# コンパイル定義
###################################################
# ソースファイルのエンコーディング
src.encoding=UTF8

###################################################
# JARファイル作成定義
###################################################
# JARファイルに含めるファイル
create.jar.src.dir.includes=**/*.xml, **/*.properties

###################################################
# テスト用JARファイル作成定義
###################################################
# テスト用JARファイルに含めるファイル
create.TEST-jar.class.dir.includes=**/*Test*, **/Xls*, **/Stub*

###################################################
# ユニットテスト実行定義
###################################################
# ユニットテスト対象のソースファイル
unitTest.test.dir.include=**/*Test.java
# ユニットテスト対象外のソースファイル
unitTest.test.dir.exclude =**/TestBase.java


build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="UnitTestProject" default="build" basedir=".">

	<!-- ========================================================== -->
	<!-- 定義値 -->
	<!-- ========================================================== -->

	<!-- プロパティファイル名 -->
	<property file="${basedir}/build.properties" />

	<!-- ソース参照 -->
	<path id="build.src">
		<pathelement path="${src.dir}" />
		<pathelement path="${test.dir}" />
		<pathelement path="${stub.dir}" />
		<!-- 【プロジェクト参照をする場合はココにソース参照を追加】 -->
	</path>

	<!-- ライブラリ参照 -->
	<path id="build.classpath">
		<fileset dir="${lib.dir}" includes="**/*" />
		<fileset dir="${test.lib.dir}" includes="**/*" />
		<!-- 【プロジェクト参照をする場合はココにライブラリ参照を追加】 -->
	</path>

	<!-- ========================================================== -->
	<!-- Antタスク実行順序 -->
	<!-- ========================================================== -->
	<!-- コンパイル、JavaDoc生成、Jarファイル生成 -->
	<target name="build">
		<echo message="OS:${os.name} Java:${ant.java.version} Ant:${ant.version}"/>
		<antcall target="clean" />
		<antcall target="compile" />
		<antcall target="create.jar" />
		<antcall target="javadoc" />
	</target>
	<!-- ユニットテスト実行-->
	<target name="build-unitTest">
		<antcall target="build" />
		<antcall target="unitTest" />
	</target>
	<!-- ユニットテストのカバレッジ取得 -->
	<target name="build-unitTest-coverage">
		<antcall target="build" />
		<ant antfile="${basedir}/ant/coverage.xml" target="coverage">
			<reference refid="build.classpath" torefid="build.classpath"/>
		</ant>
	</target>
	<!-- 静的解析 -->
	<target name="build-analysis">
		<antcall target="clean" />
		<antcall target="compile" />
		<ant antfile="${basedir}/ant/findBugs.xml" target="analysis">
			<reference refid="build.classpath" torefid="build.classpath"/>
		</ant>
		<ant antfile="${basedir}/ant/cpd.xml" target="analysis">
			<reference refid="build.classpath" torefid="build.classpath"/>
		</ant>
		<ant antfile="${basedir}/ant/checkStyle.xml" target="analysis">
			<reference refid="build.classpath" torefid="build.classpath"/>
		</ant>
	</target>

	<!-- ========================================================== -->
	<!-- ディレクトリをクリア -->
	<!-- ========================================================== -->
	<target name="clean">
		<delete dir="${class.dir}" />
		<delete dir="${jar.dir}" />
		<delete dir="${javadoc.dir}" />
		<delete dir="${report.dir}" />
		<delete dir="${codeAnalysis.dir}" />
		<mkdir dir="${class.dir}" />
		<mkdir dir="${jar.dir}" />
		<mkdir dir="${javadoc.dir}" />
		<mkdir dir="${report.dir}" />
		<mkdir dir="${codeAnalysis.dir}" />
	</target>

	<!-- ========================================================== -->
	<!-- コンパイル -->
	<!-- ========================================================== -->
	<target name="compile">
		<javac destdir="${class.dir}" encoding="${src.encoding}" debug="on" includeAntRuntime="no" failonerror="false">
			<src refid="build.src" />
			<classpath refid="build.classpath" />
		</javac>
	</target>

	<!-- ========================================================== -->
	<!-- JARファイル作成 -->
	<!-- ========================================================== -->
	<target name="create.jar">
		<jar destfile="${jar.dir}/${jar.name}">
			<fileset dir="${src.dir}" includes="${create.jar.src.dir.includes}" />
			<fileset dir="${class.dir}" excludes="${create.TEST-jar.class.dir.includes}" />
		</jar>
		<jar destfile="${jar.dir}/TEST-${jar.name}">
			<fileset dir="${class.dir}" includes="${create.TEST-jar.class.dir.includes}" />
		</jar>
	</target>

	<!-- ========================================================== -->
	<!-- JavaDoc作成 -->
	<!-- ========================================================== -->
	<target name="javadoc">
		<javadoc packagenames="*" sourcepath="${src.dir}" destdir="${javadoc.dir}" encoding="${src.encoding}" charset="${src.encoding}">
			<classpath>
				<fileset dir="${lib.dir}" includes="*.jar" />
			</classpath>
		</javadoc>
	</target>

	<!-- ========================================================== -->
	<!-- ユニットテスト実行 -->
	<!-- ========================================================== -->
	<target name="unitTest">
		<junit fork="yes" maxmemory="512m" printsummary="on">
			<classpath location="${class.dir}" />
			<classpath refid="build.classpath" />
			<formatter type="xml" />
			<batchtest fork="yes" todir="${report.dir}">
				<fileset dir="${test.dir}">
					<include name="${unitTest.test.dir.include}" />
					<exclude name="${unitTest.test.dir.exclude}" />
				</fileset>
			</batchtest>
		</junit>
	</target>

</project>