build.xml

今まで使い回しで記述してた 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
#---------------------------------

f:id:posturan:20160314233011j:plain