* Added a new property 'executable.jar'. When set to true, the build creates an executable jar. It expects the fully qualified main class name in the 'main.class' property. The executable jar expects all the runtime libs to be located in a folder called 'lib' next to the jar.
247 lines
8.5 KiB
XML
247 lines
8.5 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<project name="Jonathan Bernard Build Common"
|
|
xmlns:ivy="antlib:org.apache.ivy.ant">
|
|
|
|
<property environment="env"/>
|
|
|
|
<!--======== INIT TARGETS ========-->
|
|
<target name="-init" depends="-common-init,init"/>
|
|
|
|
<target name="-common-init">
|
|
<!-- Set default values for some key properties. Since properties are
|
|
write once, any value set before this point takes precedence. -->
|
|
|
|
<property name="versioning.file" value="project.properties"/>
|
|
|
|
<property name="src.dir" value="${basedir}/src"/>
|
|
<property name="build.dir" value="${basedir}/build"/>
|
|
<property name="lib.dir" value="${basedir}/lib"/>
|
|
<property name="resources.dir" value="${basedir}/resources"/>
|
|
<property name="splash.image" value="splash.png"/>
|
|
|
|
<!--======== PATHS ========-->
|
|
<path id="groovy.classpath">
|
|
<fileset dir="${env.GROOVY_HOME}/lib">
|
|
<include name="*.jar"/>
|
|
</fileset>
|
|
</path>
|
|
|
|
<path id="groovy.embeddable">
|
|
<fileset dir="${env.GROOVY_HOME}/embeddable">
|
|
<include name="*.jar"/>
|
|
</fileset>
|
|
</path>
|
|
|
|
<path id="compile-libs">
|
|
<fileset dir="${build.dir}/lib/compile/jar">
|
|
<include name="*.jar"/>
|
|
</fileset>
|
|
</path>
|
|
|
|
<path id="runtime-libs">
|
|
<fileset dir="${build.dir}/lib/runtime/jar">
|
|
<include name="*.jar"/>
|
|
</fileset>
|
|
</path>
|
|
|
|
</target>
|
|
|
|
<target name="-init-groovy">
|
|
<taskdef name="groovyc" classpathref="groovy.classpath"
|
|
classname="org.codehaus.groovy.ant.Groovyc"/>
|
|
|
|
<taskdef name="groovy" classpathref="groovy.classpath"
|
|
classname="org.codehaus.groovy.ant.Groovy"/>
|
|
</target>
|
|
|
|
<target name="init"/>
|
|
|
|
<target name="clean" depends="-init">
|
|
<delete dir="${build.dir}"/>
|
|
</target>
|
|
|
|
<!--======== LIBRARY TARGETS ========-->
|
|
<target name="lib" depends="-lib-local,-lib-ivy"/>
|
|
|
|
<target name="-init-ivy">
|
|
<ivy:settings id="ivy.settings" file="ivysettings.xml"/>
|
|
</target>
|
|
|
|
<target name="-lib-ivy" depends="-init-ivy" unless="${lib.local}">
|
|
<ivy:retrieve settingsRef="ivy.settings"
|
|
pattern="${lib.dir}/[conf]/[type]/[artifact]-[revision].[ext]"
|
|
conf="compile,runtime"/>
|
|
</target>
|
|
|
|
<target name="-lib-groovy" if="${lib.local}">
|
|
<copy todir="${build.dir}/lib/runtime/jar">
|
|
<fileset dir="${env.GROOVY_HOME}/embeddable"/>
|
|
</copy>
|
|
</target>
|
|
|
|
<target name="-lib-local" if="${lib.local}">
|
|
<echo message="Resolving libraries locally."/>
|
|
<mkdir dir="${build.dir}/lib/compile/jar"/>
|
|
<mkdir dir="${build.dir}/lib/runtime/jar"/>
|
|
<copy todir="${build.dir}/lib/compile/jar" failonerror="false">
|
|
<fileset dir="${lib.dir}/compile/jar"/>
|
|
</copy>
|
|
|
|
<copy todir="${build.dir}/lib/runtime/jar" failonerror="false">
|
|
<fileset dir="${lib.dir}/runtime/jar"/>
|
|
</copy>
|
|
</target>
|
|
|
|
<!--======== VERSIONING TARGETS ========-->
|
|
<target name="increment-build-number" depends="-init">
|
|
<propertyfile file="${versioning.file}">
|
|
<entry key="build.number" default="0" type="int" value="1"
|
|
operation="+"/>
|
|
</propertyfile>
|
|
</target>
|
|
|
|
<target name="set-version" depends="-init">
|
|
<input
|
|
message="The current version is ${version}. Enter a new version: "
|
|
addproperty="new-version"/>
|
|
<propertyfile file="${versioning.file}">
|
|
<entry key="version" value="${new-version}" operation="="
|
|
type="string"/>
|
|
<entry key="build.number" value="0" type="int" operation="="/>
|
|
</propertyfile>
|
|
</target>
|
|
|
|
<!--======== COMPILATION TARGETS ========-->
|
|
<target name="-compile-groovy" depends="-init,-init-groovy,lib,-lib-groovy">
|
|
<mkdir dir="${build.dir}/main/classes"/>
|
|
<groovyc srcdir="${src.dir}/main" destdir="${build.dir}/main/classes"
|
|
includeAntRuntime="false">
|
|
|
|
<classpath>
|
|
<path refid="groovy.classpath"/>
|
|
<path refid="compile-libs"/>
|
|
</classpath>
|
|
<javac/>
|
|
</groovyc>
|
|
</target>
|
|
|
|
<target name="-compile-java" depends="-init,lib">
|
|
<mkdir dir="${build.dir}/main/classes"/>
|
|
<javac srcdir="${src.dir}/main" destdir="${build.dir}/main/classes"
|
|
includeAntRuntime="false" classpathref="compile-libs"/>
|
|
</target>
|
|
|
|
<target name="compile" depends="-compile-groovy"/>
|
|
|
|
<!--======== JUNIT TARGETS ========-->
|
|
<target name="-compile-tests-groovy" depends="-init,compile">
|
|
<mkdir dir="${build.dir}/test/classes"/>
|
|
<groovyc srcdir="${src.dir}/test" destdir="${build.dir}/test/classes"
|
|
includeAntRuntime="false">
|
|
|
|
<classpath>
|
|
<path refid="groovy.classpath"/>
|
|
<path refid="compile-libs"/>
|
|
<path location="${build.dir}/main/classes"/>
|
|
</classpath>
|
|
</groovyc>
|
|
</target>
|
|
|
|
<target name="-compile-tests-java" depends="-init,compile">
|
|
<mkdir dir="${build.dir}/test/classes"/>
|
|
<javac srcdir="${src.dir}/test" destdir="${build.dir}/test/classes"
|
|
includeAntRuntime="false">
|
|
<classpath>
|
|
<path refid="compile-libs"/>
|
|
<path location="${build.dir}/main/classes"/>
|
|
</classpath>
|
|
</javac>
|
|
</target>
|
|
|
|
<target name="compile-tests" depends="-compile-tests-groovy"/>
|
|
|
|
<target name="run-tests" depends="compile-tests,resources-test">
|
|
<junit printsummary="true">
|
|
<classpath>
|
|
<path refid="groovy.classpath"/>
|
|
<path refid="compile-libs"/>
|
|
<path location="${build.dir}/main/classes"/>
|
|
<path location="${build.dir}/test/classes"/>
|
|
</classpath>
|
|
<formatter type="plain" usefile="false"/>
|
|
<batchtest>
|
|
<fileset dir="${build.dir}/test/classes">
|
|
<include name="**/*"/>
|
|
</fileset>
|
|
</batchtest>
|
|
</junit>
|
|
</target>
|
|
|
|
<!--======== RESOURCES TARGETS ========-->
|
|
|
|
<target name="resources" depends="-init">
|
|
<mkdir dir="${build.dir}/main/classes"/>
|
|
<copy todir="${build.dir}/main/classes" failonerror="false">
|
|
<fileset dir="${resources.dir}/main/"/>
|
|
</copy>
|
|
</target>
|
|
|
|
<target name="resources-test" depends="-init">
|
|
<mkdir dir="${build.dir}/test/classes"/>
|
|
<copy todir="${build.dir}/test/classes" failonerror="false">
|
|
<fileset dir="${resources.dir}/test/"/>
|
|
</copy>
|
|
</target>
|
|
|
|
<!--======== BUILD TARGETS ========-->
|
|
<target name="-build-modular-lib" unless="executable.jar"
|
|
depends="compile,increment-build-number,resources">
|
|
|
|
<jar destfile="${build.dir}/${name}-${version}.${build.number}.jar"
|
|
basedir="${build.dir}/main/classes"/>
|
|
</target>
|
|
|
|
<target name="-build-modular-executable" if="executable.jar"
|
|
depends="compile,increment-build-number,resources">
|
|
|
|
<pathconvert property="jar.classpath" pathsep=" " refid="runtime-libs">
|
|
<mapper>
|
|
<chainedmapper>
|
|
<!-- remove absolute path -->
|
|
<flattenmapper />
|
|
|
|
<!-- add lib/ prefix -->
|
|
<globmapper from="*" to="lib/*" />
|
|
</chainedmapper>
|
|
</mapper>
|
|
</pathconvert>
|
|
|
|
<jar destfile="${build.dir}/${name}-${version}.${build.number}.jar"
|
|
basedir="${build.dir}/main/classes">
|
|
|
|
<manifest>
|
|
<attribute name="Main-Class" value="${main.class}"/>
|
|
<attribute name="Class-Path" value="${jar.classpath}"/>
|
|
<attribute name="SplashScreen-Image" value="${splash.image}"/>
|
|
</manifest>
|
|
</jar>
|
|
</target>
|
|
|
|
<target name="-build-modular"
|
|
depends="-build-modular-lib,-build-modular-executable"/>
|
|
|
|
<target name="-build-packed-libs"
|
|
depends="compile,increment-build-number,resources">
|
|
|
|
<unjar destdir="${build.dir}/main/classes">
|
|
<fileset dir="${build.dir}/lib/runtime/jar"/>
|
|
</unjar>
|
|
|
|
<jar destfile="${build.dir}/${name}-${version}.${build.number}.jar"
|
|
basedir="${build.dir}/main/classes"/>
|
|
</target>
|
|
|
|
<target name="build" depends="-build-modular"/>
|
|
|
|
</project>
|