2012年3月22日木曜日

[JAVA] ANT 构建 JAR 包与自动测试

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

    <!-- settings -->

    <!-- package name -->
    <property name="packagename" value="com.aaa.bbb.ccc" />

    <!-- main class -->
    <property name="mainclass" value="HelloWorld" />

    <!-- jar name -->
    <property name="jarname" value="hello_world" />

    <!-- src directory -->
    <property name="dir.src.root" value="src" />
    <property name="dir.src.base" value="src/com/aaa/bbb/ccc" />
    <property name="dir.src" value="${dir.src.base}/hello_world" />
    <property name="dir.build" value="build" />
    <property name="dir.src.classes" value="${dir.build}/classes" />
    <property name="dir.src.classes-instrumented" value="${dir.build}/instrumented-classes" />
    <property name="dir.dist" value="${dir.build}/dist" />
    <property name="dir.dist.lib" value="${dir.dist}/lib" />

    <!-- javadoc directory -->
    <property name="dir.javadoc" value="doc" />

    <!-- lib directory -->
    <property name="dir.lib" value="lib" />

    <!-- test directory -->
    <property name="dir.test.src" value="${dir.src.base}/hello_world_test" />
    <property name="dir.test" value="${dir.build}/test" />
    <property name="dir.test.classes" value="${dir.test}/classes" />
    <property name="dir.test.report" value="${dir.test}/report" />
    <property name="dir.test.coverage-report" value="${dir.test}/coverage-report" />
    <property name="dir.test.data" value="${dir.test}/data" />
    <property name="dir.test.lib" value="${dir.test}/lib" />

    <!-- compiler -->
    <property name="compiler" value="/usr/bin/javac" />

    <!-- Javac Javadoc encoding -->
    <property name="encoding" value="UTF-8" />

    <!-- classpath -->
    <!-- JDBC -->
    <path id="classpath.jdbc">
        <fileset dir="${dir.lib}">
            <include name="ojdbc14.jar" />
            <include name="postgresql-9.0-802.jdbc4.jar" />
        </fileset>
    </path>

    <!-- Test -->
    <path id="classpath.test">
        <pathelement location="${dir.src.classes}" />
        <pathelement location="${dir.test.classes}" />
        <fileset dir="${dir.dist.lib}">
            <include name="*.jar" />
        </fileset>
        <fileset dir="${dir.test.lib}">
            <include name="*.jar" />
        </fileset>
    </path>

    <!-- cobertura uses jar files -->
    <path id="classpath.cobertura">
        <fileset dir="${dir.lib}">
            <include name="cobertura.jar" />
            <include name="**/*.jar" />
        </fileset>
    </path>

    <!-- add cobertura -->
    <taskdef classpathref="classpath.cobertura" resource="tasks.properties" />

    <!-- target -->

    <!-- build -->
    <target name="build" depends="pretest">
        <echo message="" />
    </target>

    <!-- init build directory -->
    <target name="init">
        <echo message="" />
        <delete dir="${dir.build}" />
        <mkdir dir="${dir.build}" />
        <mkdir dir="${dir.src.classes}" />
    </target>

    <!-- compile -->
    <target name="compile" depends="init">
        <echo message="" />
        <javac encoding="${encoding}" srcdir="${dir.src}" destdir="${dir.src.classes}"
            executable="${compiler}" includeantruntime="false" debug="true"
            debuglevel="vars,lines,source">
            <classpath refid="classpath.jdbc" />
        </javac>
    </target>

    <!-- make jar file -->
    <target name="jar" depends="compile">
        <echo message="" />
        <mkdir dir="${dir.dist}" />
        <jar basedir="${dir.src.classes}" destfile="${dir.dist}/${jarname}.jar">
            <manifest>
                <attribute name="Main-Class" value="${packagename}.${mainclass}" />
            </manifest>
        </jar>
    </target>

    <!-- copy setting file -->
    <target name="copy" depends="jar">
        <echo message="" />
        <copy todir="${dir.dist}">
            <fileset dir=".">
                <include name="hello_world.properties" />
                <include name="hello_world" />
                <include name="install.sh" />
            </fileset>
        </copy>
        <copy todir="${dir.dist.lib}">
            <fileset dir="${dir.lib}">
                <include name="*jdbc*.jar" />
            </fileset>
        </copy>
    </target>

    <!-- pre test -->
    <target name="pretest" depends="copy">
        <echo message="" />
        <delete dir="${dir.test}" />
        <mkdir dir="${dir.test}" />
        <mkdir dir="${dir.test.classes}" />
        <mkdir dir="${dir.test.report}" />
        <mkdir dir="${dir.test.coverage-report}" />
        <mkdir dir="${dir.test.data}" />
        <mkdir dir="${dir.test.lib}" />
        <copy todir="${dir.test.lib}">
            <fileset dir="${dir.lib}">
                <exclude name="*jdbc*.jar" />
            </fileset>
        </copy>
        <copy todir="${dir.test}">
            <fileset dir="./test">
                <include name="test*.properties" />
            </fileset>
        </copy>
        <copy todir="${dir.test.data}">
            <fileset dir="./test/data" />
        </copy>

        <javac encoding="${encoding}" srcdir="${dir.test.src}" destdir="${dir.test.classes}"
            executable="${compiler}" includeantruntime="false" debug="true"
            debuglevel="vars,lines,source">
            <classpath refid="classpath.test" />
        </javac>
    </target>

    <!-- test execute -->
    <target name="test" depends="pretest,jar">
        <echo message="" />
        <cobertura-instrument todir="${dir.src.classes-instrumented}">
            <fileset dir="${dir.src.classes}">
                <include name="**/*.class" />
            </fileset>
            <fileset dir="${dir.test.classes}">
                <include name="**/*.class" />
            </fileset>
        </cobertura-instrument>
        <junit fork="yes" printsummary="true" showoutput="false">
            <jvmarg value="-Dfile.encoding=${encoding}" />
            <classpath location="${dir.src.classes-instrumented}" />
            <classpath refid="classpath.test" />
            <formatter type="xml" />
            <batchtest fork="yes" todir="${dir.test}">
                <fileset dir="${dir.test.classes}">
                    <include name="**/*Test.class" />
                </fileset>
            </batchtest>
        </junit>
        <delete dir="${dir.test.report}" />
        <delete dir="${dir.test.coverage-report}" />
        <mkdir dir="${dir.test.report}" />
        <mkdir dir="${dir.test.coverage-report}" />
        <junitreport todir="${dir.test}">
            <fileset dir="${dir.test}">
                <include name="TEST-*.xml" />
            </fileset>
            <report format="frames" todir="${dir.test.report}" />
        </junitreport>
        <cobertura-report format="html" srcdir="${dir.src.root}"
            destdir="${dir.test.coverage-report}" />
        <delete>
            <fileset dir="${dir.test}">
                <include name="TEST*.xml" />
            </fileset>
        </delete>
    </target>

    <!-- make Javadoc -->
    <target name="javadoc">
        <echo message="" />
        <delete dir="${dir.javadoc}" />
        <mkdir dir="${dir.javadoc}" />
        <javadoc encoding="${encoding}" classpathref="classpath.jdbc"
            sourcepath="${dir.src.root}" packagenames="${packagename}" destdir="${dir.javadoc}" />
    </target>

    <!-- clean -->
    <target name="clean">
        <echo message="" />
        <delete dir="${dir.build}" />
        <delete dir="${dir.javadoc}" />
        <delete file="hello_world.log.lck" />
        <delete file="hello_world.log" />
        <delete file="cobertura.ser" />
    </target>
</project>

0 件のコメント:

コメントを投稿