TFSでJavaのビルド環境構築 in 2012 その3:build.xml

とりあえず、今回使ったbuild.xmlをそのまま置いておきます。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="buildall" name="JavaProject1">
    <property environment="env"/>
    <property name="debuglevel" value="source,lines,vars"/>
    <property name="target" value="1.6"/>
    <property name="source" value="1.6"/>
    <property name="jar.output.dir" value="${BinariesRoot}/Jar"/>
    <property name="junit.home" value="${env.JUNIT_HOME}"/>
    <property name="junit.result.dir" value="${BinariesRoot}/JUnitResult"/>
    <property name="findbugs.home" value="${env.FINDBUGS_HOME}"/>
    <property name="findbugs.result.dir" value="${BinariesRoot}/FindBugsResult"/>
    <property name="checkstyle.home" value="${env.CHECKSTYLE_HOME}"/>
    <property name="checkstyle.result.dir" value="${BinariesRoot}/CheckStyleResult"/>
    <property name="cobertura.home" value="${env.COBERTURA_HOME}"/>
    <property name="cobertura.instrument.dir" value="instrument-cobertura"/>
    <property name="cobertura.result.dir" value="${BinariesRoot}/CoberturaResult"/>
    <property name="log4j.home" value="${env.LOG4J_HOME}"/>

    <path id="JavaProject1.classpath">
        <pathelement location="bin"/>
        <pathelement location="testbin"/>
    </path>
<path id="cobertura.classpath">
     <fileset dir="${cobertura.home}">
         <include name="cobertura.jar" />
         <include name="lib/**/*.jar" />
     </fileset>
</path>
    <path id="junit.classpath">
        <pathelement location="${cobertura.instrument.dir}"/>
     <path refid="JavaProject1.classpath"/>
        <pathelement location="testbin"/>
        <pathelement location="${junit.home}/junit.jar"/>
     <path refid="cobertura.classpath"/>
    </path>

<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
   classpath="${findbugs.home}/lib/findbugs-ant.jar"/>
<taskdef resource="checkstyletask.properties"
   classpath="${checkstyle.home}/checkstyle-5.6-all.jar"/>
<taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>

<target name="init">
        <mkdir dir="bin"/>
        <copy includeemptydirs="false" todir="bin">
            <fileset dir="src">
                <exclude name="**/*.launch"/>
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
    </target>

<target name="buildall"
  depends="build,testbuild,checkstyle,instrument-cobertura,junitreport,
     coverage,findbugs,checkmetrics,make-jar"/>

<target name="build" depends="init">
        <echo message="${ant.project.name}: ${ant.file}"/>
        <javac debug="true" debuglevel="${debuglevel}" destdir="bin"
          includeantruntime="false" source="${source}"
          target="${target}" encoding="utf-8">
            <src path="src"/>
            <classpath refid="JavaProject1.classpath"/>
        </javac>
    </target>

<target name="testbuild" depends="build">
        <mkdir dir="testbin"/>
        <javac debug="true" debuglevel="${debuglevel}" destdir="testbin"
          includeantruntime="false" source="${source}"
          target="${target}" encoding="utf-8">
            <src path="testsrc"/>
            <classpath refid="JavaProject1.classpath"/>
         <classpath path="${junit.home}/junit.jar"/>
        </javac>
    </target>

<target name="make-jar" depends="build">
  <mkdir dir="${jar.output.dir}"/>
  <jar jarfile="${jar.output.dir}/JavaProject1.jar" basedir="bin">
   <manifest>
    <attribute name="Build-Id" value="${BuildNumber}" />
   </manifest>
  </jar>
</target>

    <target name="junit" depends="build">
        <mkdir dir="${junit.result.dir}"/>
        <junit fork="yes" printsummary="withOutAndErr" haltonfailure="off"
    showoutput="true" failureproperty="junit.failed">
         <sysproperty key="net.sourceforge.cobertura.datafile" file="cobertura.ser"/>
            <classpath refid="junit.classpath"/>
            <formatter type="xml"/>
         <batchtest todir="${junit.result.dir}">
          <fileset dir="testsrc">
           <include name="**/*Test.java" />
          </fileset>
         </batchtest>
        </junit>
    </target>

    <target name="junitreport" depends="junit">
        <junitreport todir="${junit.result.dir}">
            <fileset dir="${junit.result.dir}">
                <include name="TEST-*.xml"/>
            </fileset>
            <report format="frames" todir="${junit.result.dir}"/>
        </junitreport>
    </target>

    <target name="findbugs" depends="build">
        <mkdir dir="${findbugs.result.dir}"/>
  <findbugs home="${findbugs.home}"
            output="html"
            outputFile="${findbugs.result.dir}/FindBugsResult.html"
      errorProperty="findbugs.error.failed"
      warningsProperty="findbugs.warnings.failed">
   <sourcePath path="src" />
   <class location="bin" />
  </findbugs>
    </target>

<target name="checkstyle">
        <mkdir dir="${checkstyle.result.dir}"/>
  <checkstyle config="${checkstyle.home}/sun_checks.xml" failOnViolation="false"
     failureProperty="checkstyle.failed">
   <fileset dir="src" includes="**/*.java" />
   <formatter type="xml" tofile="CheckStyleResult.xml" />
  </checkstyle>
  <style in="CheckStyleResult.xml"
    out="${checkstyle.result.dir}/CheckStyleResult.html"
    style="${checkstyle.home}/contrib/checkstyle-simple.xsl" />
</target>

<target name="instrument-cobertura">
        <mkdir dir="${cobertura.instrument.dir}"/>
  <cobertura-instrument todir="${cobertura.instrument.dir}">
      <ignore regex="org.apache.log4j.*" />
   <fileset dir="bin">
    <include name="**/*.class"/>
   </fileset>
  </cobertura-instrument>
</target>

<target name="coverage">
  <cobertura-report srcdir="src" destdir="${cobertura.result.dir}"/>
  <cobertura-report srcdir="src" destdir="${cobertura.result.dir}" format="xml"/>
</target>

<target name="checkmetrics">
  <echoproperties>
   <propertyset>
    <propertyref regex=".*.failed"/>
   </propertyset>
  </echoproperties>

  <condition property="metrics.failed"><or>
   <isset property="junit.failed"/>
   <isset property="findbugs.error.failed"/>
   <isset property="findbugs.warnings.failed"/>
   <isset property="checkstyle.failed"/>
  </or></condition>

  <fail if="metrics.failed" message="各種チェックでエラーがありました。さぁ、とっとと片づけましょう!"/>
</target>
</project>

通常(?)、各種ワークフォルダを削除する処理が入りますが、TFSからビルド実行した場合、TFS側で基底フォルダを削除後新規作成しますので、build.xml内では不要です。

「オンラインストレージ使え」とか聞こえそうですが、会社からは使えないんです^ ^;

個別の内容説明について次から書きます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください