Java-Ant

Antのテンプレ

 build.properties

# vim:set ts=4 sw=4 et ws is nowrap ft=jproperties:
##################################################
#
# Ant ビルドファイル用プロパティファイル
#
##################################################

##################################################
# アプリケーション名
##################################################
app.name         = SampleApplicationTemplate

##################################################
# アプリケーション基底Javaパッケージ
##################################################
app.base.package = gsf.utils

##################################################
# アプリケーションエントリークラス
##################################################
app.entry.class  = SampleExecutor

##################################################
# バージョン番号
##################################################
version.number   = 1.0.0

##################################################
# 各種ディレクトリ
##################################################
bin.dir          = bin
data.dir         = data
conf.dir         = conf
src.dir          = src
test.dir         = test
test.report.dir  = report
lib.dir          = lib
tmp.dir          = tmp
target.dir       = target
target.class.dir = ${target.dir}/classes
target.jar.dir   = ${target.dir}/jars
target.dist.dir  = ${target.dir}/dist
doc.dir          = doc
doc.javadoc.dir  = ${doc.dir}/javadoc

##################################################
# エンコーディング
##################################################
src.encoding     = UTF-8
doc.encoding     = UTF-8
doc.charset      = ${doc.encoding}

##################################################
# ソースファイル設定
##################################################
src.eol          = crlf
src.tablength    = 4


build.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- vim:set ts=4 sw=4 et ws is nowrap ft=xml: -->
<project name="Samples Application Build Project." basedir="." default="compile">
    <description>
        プロジェクトをビルドする。
        デフォルトは、compileタスク。
        jarファイル作成を行う場合は、jarタスクを実行する。
    </description>

    <!-- プロパティファイルを読み込み -->
    <property file="build.properties"/>
    <property file="${conf.dir}/database.properties"/>

    <!--
        プロジェクトで使用するクラスパスを設定
    -->
    <path id="build.class.path">
        <fileset dir="${lib.dir}">
            <include name="**/*.jar"/>
        </fileset>
    </path>
    <path id="runtime.class.path">
        <path refid="build.class.path"/>
        <pathelement location="${target.class.dir}"/>
        <pathelement location="${conf.dir}"/>
    </path>

    <!--
        TestNG用タスク定義
    -->
    <taskdef name="testng" classpathref="runtime.class.path" classname="org.testng.TestNGAntTask" />

    <!--
        初期設定タスク

        ディレクトリ構造を構築
    -->
    <target name="init" description="初期ディレクトリ構造を構築する。">
        <mkdir dir="${bin.dir}"/>
        <mkdir dir="${data.dir}"/>
        <mkdir dir="${conf.dir}"/>
        <mkdir dir="${src.dir}"/>
        <mkdir dir="${test.dir}"/>
        <mkdir dir="${test.report.dir}"/>
        <mkdir dir="${lib.dir}"/>
        <mkdir dir="${tmp.dir}"/>
        <mkdir dir="${target.class.dir}"/>
        <mkdir dir="${target.jar.dir}"/>
        <mkdir dir="${target.dist.dir}"/>
        <mkdir dir="${doc.javadoc.dir}"/>
    </target>

    <!--
        ドキュメントディレクトリ削除タスク(プライベート)
    -->
    <target name="doc-clean" description="ドキュメントディレクトリの内容を削除する。">
        <delete>
            <fileset dir="${doc.javadoc.dir}">
                <include name="**/*"/>
            </fileset>
        </delete>
        <delete dir="${doc.javadoc.dir}"/>
    </target>

    <!--
        テストレポートディレクトリ削除タスク(プライベート)
    -->
    <target name="report-clean" description="テストレポートディレクトリの内容を削除する。">
        <delete>
            <fileset dir="${test.report.dir}">
                <include name="**/*"/>
            </fileset>
        </delete>
        <delete dir="${test.report.dir}"/>
    </target>

    <!--
        各種生成物削除タスク
    -->
    <target name="clean" description="各種生成物を削除する。">
        <delete>
            <fileset dir="${target.dir}">
                <include name="*"/>
            </fileset>
            <fileset dir="${target.class.dir}">
                <include name="**/*"/>
            </fileset>
            <fileset dir="${target.jar.dir}">
                <include name="**/*"/>
            </fileset>
            <fileset dir="${target.dist.dir}">
                <include name="**/*"/>
            </fileset>
        </delete>
        <delete dir="${target.dir}"/>
    </target>

    <!--
        全成果物および生成ドキュメント削除タスク
    -->
    <target name="clean-all" depends="doc-clean, report-clean, clean" description="全ての成果物およびドキュメントを削除する。">
        <!-- nop; -->
    </target>

    <!--
        コンパイル前実行タスク(プライベート)
    -->
    <target name="-prepare" depends="init" description="ソースディレクトリの各種リソースファイルをクラスディレクトリにコピーする。(プライベートターゲット)">
        <copy todir="${target.class.dir}">
            <fileset dir="${src.dir}">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/*.dicon"/>
                <include name="**/*.gif"/>
                <include name="**/*.jpg"/>
                <include name="**/*.jpeg"/>
                <include name="**/*.dat"/>
            </fileset>
        </copy>
    </target>

    <!--
        アプリケーションクラスのコンパイルを行う.
    -->
    <target name="compile" depends="-prepare" description="コンパイルを行う。">
        <!-- アプリケーション側のソースをコンパイル -->
        <javac
            srcdir="${src.dir}"
            destdir="${target.class.dir}"
            debug="true"
            deprecation="on"
            includeantruntime="no"
            classpathref="build.class.path"
            encoding="${src.encoding}"
        >
            <!--<compilerarg line="-Xlint:unchecked"/>-->
        </javac>
    </target>

    <!--
        テストクラスのコンパイルを行う.
    -->
    <target name="compile-test" depends="compile" description="テストクラスのコンパイルを行う。">
        <!-- ユニットテスト側のソースをコンパイル -->
        <javac
            srcdir="${test.dir}"
            destdir="${target.class.dir}"
            debug="true"
            deprecation="on"
            includeantruntime="no"
            classpathref="build.class.path"
            encoding="${src.encoding}"
        >
            <!--<compilerarg line="-Xlint:unchecked"/>-->
        </javac>
    </target>

    <!--
        ユニットテストタスク
    -->
    <target name="test" description="ユニットテストを実行する。(Facade)">
        <antcall target="test-testng"/>
    </target>

    <!--
        TestNGを利用してユニットテストを行う.
    -->
    <target name="test-testng" depends="compile-test" description="TestNGでユニットテストを実行する。">
        <testng classpathref="runtime.class.path" enableAssert="true" outputdir="${test.report.dir}">
            <classfileset dir="${target.class.dir}" includes="**/*Test.class"/>
        </testng>
    </target>

    <!--
        JUnitを利用してユニットテストを行う.
    -->
    <target name="test-junit" depends="compile-test" description="JUnitでユニットテストを実行する。">
        <junit
            printsummary="withOutAndErr"
            haltonfailure="no"
            haltonerror="no"
            fork="yes"
            >
            <classpath refid="runtime.class.path"/>
            <formatter type="plain" usefile="true"/>
            <batchtest todir="${test.report.dir}">
                <fileset dir="${target.class.dir}">
                    <include name="**/*Test.*"/>
                </fileset>
            </batchtest>
        </junit>
    </target>

    <!--
        jarファイル生成タスク
    -->
    <target name="jar" depends="compile" description="jarファイルを生成する。">
        <jar
            basedir="${target.class.dir}"
            compress="true"
            jarfile="${target.jar.dir}/${app.name}-${version.number}.jar"
            excludes="**/*Test.class">
            <manifest>
                <attribute name="Main-Class" value="${app.base.package}.${app.entry.class}"/>
            </manifest>
        </jar>
        <delete>
            <fileset dir="${bin.dir}">
                <include name="*.jar"/>
            </fileset>
        </delete>
        <copy todir="${bin.dir}">
            <fileset dir="${target.jar.dir}">
                <include name="${app.name}*.jar"/>
            </fileset>
        </copy>
    </target>

    <!--
        javaクラス実行タスク
    -->
    <target
        name="exec"
        depends="compile"
        description="特定のjavaクラスを実行する。実行する際は、target.class.nameプロパティを必要とする。">
        <java
            classname="${target.class.name}"
            fork="yes"
            classpathref="runtime.class.path">
            <jvmarg value="-Dswing.aatext=true"/>
            <jvmarg value="-Dswing.boldMetal=false"/>
        </java>
    </target>

    <!--
        アプリケーションメインクラスを直接実行.
    -->
    <target name="exec-main" depends="compile" description="アプリケーションメインクラスを直接実行。実行する際はmain.argsプロパティを必要とする。">
        <java
            classname="${app.base.package}.${app.entry.class}"
            fork="yes"
            classpathref="runtime.class.path">
            <jvmarg value="-Dswing.aatext=true"/>
            <jvmarg value="-Dswing.boldMetal=false"/>
            <arg value="${main.args}"/>
        </java>
    </target>

    <!--
        javadoc生成タスク
    -->
    <target name="javadoc" depends="doc-clean, init" description="javadocを生成する。">
        <javadoc
            destdir="${doc.javadoc.dir}"
            classpathref="build.class.path"
            charset="${doc.charset}"
            encoding="${src.encoding}"
            docencoding="${doc.encoding}"
            version="yes"
            author="yes">
            <fileset dir="${src.dir}">
                <include name="**/*.java"/>
            </fileset>
        </javadoc>
    </target>
</project>