Subversion Repositories splitter

Rev

Rev 438 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?xml version="1.0"?>
<!--
   File: build.xml
   
   Copyright (C) 2006 Steve Ratcliffe
   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License version 2 or 3 as
    published by the Free Software Foundation.
   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
   
   
   Author: Steve Ratcliffe
   Create date: 3 Jan 2008
-->
<project name="splitter" default="dist" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant">

  <!-- Init -->
  <property name="top" value="."/>

        <property name="project.name" value="${ant.project.name}"/>

  <!--
   This file is not checked into svn, so you can create it and put any
   property definitions that you want to override those below.
 -->
  <property file="${top}/local.properties"/>

  <property name="build" value="build"/>
  <property name="dist" value="dist"/>
  <property name="src" value="src"/>
  <property name="lib" value="lib"/>
  <property name="test" value="test"/>
  <property name="doc" value="doc"/>
  <property name="javadoc" value="${doc}/api"/>
  <property name="resources" value="resources"/>

  <property name="build.classes" value="${build}/classes"/>
  <property name="build.test-classes" value="${build}/test-classes"/>
  <property name="build.test-output" location="${build}/test-output"/>

        <property name="project.jar" value="${dist}/${project.name}.jar"/>

  <!-- Third party libraries -->
        <property name="xpp.jar" location="${lib}/compile/xpp3-1.1.4c.jar"/>

        <!-- the project's build timestamp -->
        <tstamp>
                <format property="build.timestamp" pattern="yyyy-MM-dd'T'HH:mm:ssZ" />
        </tstamp>

        <!-- ivy dependency support -->
        <property name="ivy.version" value="2.2.0"/>
        <property name="ivy.lib.dir" value="${basedir}/lib" />
        <property name="ivy.jar.dir" value="${ivy.lib.dir}/build" />
        <property name="ivy.retrieve.pattern" value="${ivy.lib.dir}/[conf]/[artifact]-[revision].[ext]" />
        <property name="ivy.distrib.dir" value="ivy-distrib" />

  <!-- Classpaths -->
  <path id="classpath">
    <pathelement location="${build.classes}"/>
                <fileset dir="${ivy.lib.dir}/compile" />
  </path>

  <path id="test.classpath">
    <path refid="classpath"/>
    <pathelement location="${build.test-classes}"/>
                <fileset dir="${ivy.lib.dir}/test" includes="*.jar"/>
  </path>

        <!-- targets for downloading and registering ivy -->
        <target name="ivy-availability" description="Checks if the ivy library is available">
                <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy-${ivy.version}.jar" />
                <available property="ivy.available" file="${ivy.jar.file}" />
        </target>

        <target name="download-ivy" unless="ivy.available" description="Downloads the ivy library from public repositories.">
                <delete dir="${ivy.jar.dir}"/>
                <mkdir dir="${ivy.jar.dir}" />
                <mkdir dir="${ivy.lib.dir}/compile" />
                <mkdir dir="${ivy.lib.dir}/test" />
                <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar"
                                 dest="${ivy.jar.file}" usetimestamp="true"/>
        </target>

        <target name="init-ivy" depends="ivy-availability, download-ivy" description="Registers ivy with ant and initializes it." unless="ivy.initialized">
                <path id="ivy.lib.path">
                        <fileset dir="${ivy.jar.dir}" includes="*.jar" />
                        <path refid="test.classpath"/>
                </path>
                <taskdef resource="org/apache/ivy/ant/antlib.xml"
                         uri="antlib:org.apache.ivy.ant"
                         classpathref="ivy.lib.path" />
                <ivy:configure />
                <ivy:info />
                <property name="ivy.initialized" value="true"/>
        </target>

        <!-- targets for fetching dependencies via ivy -->
        <target name="resolve-compile" depends="init-ivy" description="Downloads compile dependencies using ivy.">
                <ivy:retrieve conf="compile" log="download-only" />
        </target>
        <target name="resolve-test" depends="init-ivy" description="Downloads test program dependencies using ivy.">
                <ivy:retrieve conf="test" log="download-only"/>
        </target>
        <target name="resolve" depends="resolve-compile, resolve-test"
                                        description="Downloads all program dependencies using ivy." />

        <!-- targets for publishing the project (locally) via ivy -->
        <target name="publish" depends="dist">
                <copy file="${project.jar}"
                                        tofile="${ivy.distrib.dir}/jars/${project.name}-${project.version}.jar"/>
                <ivy:deliver pubrevision="${project.version}"/>
                <ivy:publish resolver="local" pubrevision="${project.version}" overwrite="true"/>
        </target>

  <!-- Prepare - make all the directories -->
  <target name="prepare">
    <mkdir dir="${build.classes}"/>
    <mkdir dir="${build.test-classes}"/>
    <mkdir dir="${build.test-output}"/>
    <mkdir dir="${resources}"/>
                <property environment="env"/>

                <condition property="have.svn">
                        <and>
                                <available file="${top}/.svn"/>
                                <or>
                                        <available file="svnversion" filepath="${env.PATH}"/>
                                        <available file="svnversion.exe" filepath="${env.PATH}"/>
                                        <available file="svnversion.exe" filepath="${env.Path}"/>
                                </or>
                        </and>
                </condition>
                <condition property="have.git">
                        <available file="${top}/.git"/>
                </condition>
  </target>

        <target name="svn-version" if="have.svn">
                <exec executable="svnversion" dir="${top}" logError="false"
                                        outputproperty="svn.version.tmp" resultproperty="svnversion.result"
                                        failifexecutionfails="false">
                        <arg value="-n" /><arg value="-c" />
                        <redirector><outputfilterchain><tokenfilter>
                                <replaceregex pattern="^([0-9]*:)?" replace="" />
                                <replaceregex pattern="^exported$" replace="" />
                        </tokenfilter></outputfilterchain></redirector>
                </exec>
                <condition property="svn.version.build" value="${svn.version.tmp}" else="unknown">
                        <and>
                                <isset property="svn.version.tmp" />
                                <equals arg1="${svnversion.result}" arg2="0" />
                                <not><equals arg1="${svn.version.tmp}" arg2="" /></not>
                        </and>
                </condition>

                <property name="project.version" value="${svn.version.build}" />
        </target>

        <target name="git-version" if="have.git">
                <exec executable="git" dir="${top}" logError="false"
                                        outputproperty="git.version.tmp" resultproperty="gitdescribe.result"
                                        failifexecutionfails="false">
                        <arg value="describe" /><arg value="--dirty" /><arg value="--tags" /><arg value="--always" />
                </exec>
                <condition property="git.version.build" value="${git.version.tmp}">
                        <and>
                                <isset property="git.version.tmp" />
                                <equals arg1="${gitdescribe.result}" arg2="0" />
                                <not><equals arg1="${git.version.tmp}" arg2="" /></not>
                        </and>
                </condition>
                <property name="project.version" value="${git.version.build}" />
        </target>

        <target name="check-version" depends="svn-version, git-version">
                <property file="${build.classes}/splitter-version.properties"/>
                <condition property="have.version">
                        <or>
                                <and>
                                        <isset property="have.svn"/>
                                        <equals arg1="${svn.version.build}" arg2="${svn.version}"/>
                                </and>
                                <and>
                                        <not><isset property="have.svn"/></not>
                                        <available file="${build}/classes/splitter-version.properties"/>
                                </and>
                        </or>
                </condition>
        </target>

        <target name="version-file" unless="have.version">
                <property name="project.version" value="${build.timestamp}" />
                <property name="svn.version.build" value="unknown"/>

                <propertyfile file="${build.classes}/splitter-version.properties">
                        <entry key="svn.version" value="${svn.version.build}" />
                        <entry key="build.timestamp" value="${build.timestamp}" />
                </propertyfile>
        </target>

  <target name="compile" depends="prepare, resolve-compile" description="main compilation">
    <javac srcdir="${src}" destdir="${build.classes}" debug="yes" includeantruntime="false">
      <include name="**/*.java"/>
      <classpath refid="classpath"/>
    </javac>
  </target>

  <target name="compile.tests" depends="prepare, resolve-test" description="test compilation">
    <javac srcdir="${test}" destdir="${build.test-classes}" debug="yes" includeantruntime="false">
      <include name="**/*.java"/>
      <classpath refid="test.classpath"/>
    </javac>
  </target>

  <target name="javadoc" description="Create the javadoc">
    <mkdir dir="doc"/>
    <javadoc destdir="${javadoc}">
      <fileset dir="${src}" includes="**/*.java"/>
      <classpath refid="classpath"/>
    </javadoc>
  </target>

  <target name="run.tests" depends="compile.tests">
    <!-- Run the java unit tests -->
    <taskdef resource="testngtasks" classpathref="test.classpath"/>
    <testng classpathref="test.classpath" outputdir="${build.test-output}" haltonfailure="true">
      <classfileset dir="${build.test-classes}">
        <include name="**/*.class"/>
      </classfileset>
    </testng>
  </target>


  <target name="dist" depends="build, check-version, version-file" description="Make the distribution area">

    <mkdir dir="${dist}"/>
    <mkdir dir="${dist}/doc/api"/>

    <copy todir="${dist}/doc">
      <fileset dir="doc" includes="*.txt"/>
    </copy>

    <copy todir="${dist}/lib">
      <fileset dir="${lib}/compile"/>
    </copy>

    <!-- misc -->
    <copy todir="${dist}">
      <fileset dir="${basedir}">
        <include name="README"/>
        <include name="LICENCE*"/>
      </fileset>
    </copy>

                <manifestclasspath property="manifest_cp" jarfile="${project.jar}">
                        <classpath>
                                <fileset dir="${dist}/lib">
                                        <include name="*.jar" />
                                </fileset>
                        </classpath>
                </manifestclasspath>

                <!-- Make the jar -->
                <jar basedir="${build.classes}" jarfile="${dist}/splitter.jar">
                        <manifest>
                                <attribute name="Main-Class" value="uk.me.parabola.splitter.Main" />
                                <attribute name="Class-Path" value="${manifest_cp}" />
                                <attribute name="Implementation-Version" value="${project.version}" />
                        </manifest>
                        <include name="**/*.class"/>
                        <include name="*.csv"/>
                        <include name="*.properties"/>
                        <zipfileset src="${xpp.jar}" includes="**/*.class,META-INF/services/**"/>
                </jar>
  </target>

  <!-- Clean everything -->
  <target name="clean">
    <delete dir="${build}"/>
  </target>

  <!-- Clobber all generated and built files -->
  <target name="clobber" depends="clean">
    <delete dir="${dist}"/>
                <delete dir="${ivy.lib.dir}"/>
  </target>

        <target name="clean-ivy" description="Clean the ivy installation.">
                <delete dir="${ivy.jar.dir}"/>
  </target>

        <target name="clean-cache" depends="init-ivy" description="Clean the ivy cache.">
                <ivy:cleancache />
        </target>

        <!-- Main -->
  <target name="build" depends="compile,compile.tests,run.tests">
    <copy todir="${build.classes}">
      <fileset dir="${resources}">
        <include name="*.properties"/>
      </fileset>
    </copy>
  </target>

  <target name="rebuild" depends="clean, build"/>
</project>