今まで使い回しで記述してた Ant build.xml は良くなかった。
Ant-Contrib を使える状態が前提であるが、書き直すことにした。
<?xml version="1.0" ?>
<project name="Labo-build" basedir="." default="buildRequest">
<property file="build.properties"/>
<property environment="env"/>
<path id="my-classpath">
<fileset dir="${my.lib}">
<include name="*.jar"/>
</fileset>
<fileset dir="${app.base}/lib2">
<include name="*.jar"/>
</fileset>
</path>
<!-- ========== ant-contrib use ======== -->
<taskdef name="foreach" classname="net.sf.antcontrib.logic.ForEach" />
<taskdef name="if" classname="net.sf.antcontrib.logic.IfTask" />
<taskdef name="propertycopy" classname="net.sf.antcontrib.property.PropertyCopy" />
<!-- =========== target Input =========== -->
<target name="buildRequest">
<echo>******************************************************************</echo>
<echo>* ビルド対象 Keyワードを入力ウィンドウで入力してください。</echo>
<foreach list="${applist}" target="guideMessage" param="appliname"/>
<echo>*</echo>
<echo>* (all を入力すると全てビルドします。)</echo>
<echo>******************************************************************</echo>
<input addproperty="appliname" message="ビルド対象 Keyワード" />
<echo>${appliname}_build を実行します...</echo>
<if>
<equals arg1="${appliname}" arg2="all" />
<then>
<antcall target="all_build" />
</then>
<else>
<antcall target="appli_build" />
</else>
</if>
</target>
<target name="guideMessage">
<propertycopy name="jarfile" from="${appliname}.jar"/>
<echo>* ${appliname} : ${jarfile} の作成 </echo>
</target>
<!-- =========== all build =========== -->
<target name="all_build">
<echo>■■■■ all build 開始 ■■■■</echo>
<foreach list="${applist}" target="foreachTarget" param="appliname"/>
<echo>■■■■ all build 終了 ■■■■</echo>
</target>
<target name="foreachTarget">
<echo>■ target = ${appliname}</echo>
<antcall target="appli_build" />
</target>
<!-- ======== compile , jar make ======== -->
<target name="appli_build" depends="appli_jar_del">
<echo>jar_make ${jarfile}</echo>
<jar jarfile="${jarfile}" basedir="${class.dir}"
manifest="${manifest.dir}/${appliname}.MANIFEST.MF"
includes="**/*.class,*.dtd,*.xml,*.properties,**/*.dtd,**/*.xml,**/*.properties,**/*.gif" />
<echo>■■■ ${appliname} をビルド終了 ■■■</echo>
</target>
<target name="appli_jar_del" depends="compile">
<echo>jar_delete ${jarfile}</echo>
<delete file="${jarfile}" />
</target>
<target name="compile" depends="clean">
<echo>compile target ${appliname}</echo>
<javac source="1.6"
fork="java$$javac.exe"
srcdir="${java.dir}"
includes="**/*.java"
destdir="${class.dir}"
deprecation="on"
debug="on"
optimize="on">
<classpath refid="my-classpath"/>
</javac>
</target>
<target name="clean">
<echo>■■■ ${appliname} をビルド開始 ■■■</echo>
<echo>clean ${appliname} class</echo>
<propertycopy name="java.dir" from="${appliname}.src"/>
<propertycopy name="class.dir" from="${appliname}.bin"/>
<propertycopy name="jarfile" from="${appliname}.jar"/>
<delete dir="${class.dir}/jp" file="*.class,**/*.class" includeemptydirs="yes" />
</target>
</project>
========================
build.propertiesの内容
#------ build base ------
app.base=..
#------ jar lib Dir ------
my.lib=${app.base}/lib
#------ source Dir ------
src.dir=${app.base}/src
#------ jar make Dir ------
distjar.dir=${app.base}/dist
#------ MANIFEST ------
manifest.dir=${app.base}/build/manifest
#------ resources dir -----
resources.dir = ${app.base}/Release/classes
#------------ Application List ------------
applist = main,test
#------ source & class Dir & jar file ------
main.src=${src.dir}/java/main
main.bin=${app.base}/classes
main.jar=${distjar.dir}/labo.jar
test.src=${src.dir}/java/test
test.bin=${app.base}/classes
test.jar=${distjar.dir}/test.jar
#---------------------------------