Common.xml 20080129
Jump to navigation
Jump to search
The file below is part of the Ant-templates. A detailed description will be added later. The stopwatch task will not work on your system. The task is not defined in standard Ant.
<?xml version="1.0"?> <!-- ============================================================== Ant Common file. A handy ant-build include file. ============================================================== The common xml file is standard included by the local.xml. This Ant file needs to be set: JAVA_HOME and ANT_HOME. Common.xml includes the Ant-Contrib library which is specified by the environmental ANT_HOME variable. Common.xml defines the variables: - env : Environment - both : false - common.classpath : java classpath - common.general.classpath : JAVA_HOME jars - copy.granularity : Copy sensability (5500) - copy.preservelastmodified : Preserve settings for copy (true) Common.xml contains the targets: - getos : Gets the Operation system and sets isUnix or isWindoze - internal.show.properties Shows/displays common.xml internal used settings. - internal.show.sync.properties Shows/displays common.xml internal used properties. - internal.test.availability Tests the availability of a drive. - internal.test.availability.directory Tests the availability of a directory on a drive. Can only be used after internal.test.availability - internal.show.availability Shows the availability of drives - internal.general.copy Copies given source files to destination if newer and based on the given filter (**/*.* format). One parameter call (with underlying structure). - internal.general.copy.id Copies given source files (as fileset with id). This makes every thinkable copy possible. Currently no synchronisation version available. Since 1.0.5.1 - internal.general.copy.param Copies given source files to destination if newer and based on the given filter (**/*.* format). All parameters are be specified at call-time. - internal.general.sync Synchronizes 2 directory structures to each other. Uses the internal.general.copy.param version. - internal.general.java Performs a java FileFind command. - internal.general.doscmd Performs a dos command. - internal.zip.fileset Zips a given fileset referenced by its id to a given zipfile. - internal.print.fileset Shows/prints a given fileset referenced by its id to the console. - internal.print.path Shows/prints a given fileset referenced by its id to the console. - isBoth Utility task for synchronize - timestamp Utility task for settings the date and time format. - startstopwatch Utility task for using a stopwatch function. The name of the stopwatch has not been resolved. ============================================================== Creator : Harm Frielink, June 2007 Modified : 1.0.1.0 - 25 Jun 2007 - Created 1.0.1.1 - 28 Jun 2007 - Adepted for sync (granularity). 1.0.1.2 - 02 Jun 2007 - Added preservelastmodified. Please be aware of these 2 1.0.2.1 - 03 Jul 2007 - isboth and both 1.0.2.1 - 03 Jul 2007 - isboth and both 1.0.2.2 - 28 Jul 2007 - VCS Subversion 1.0.2.3 - 30 Oct 2007 - Added Copy task for pictures(How to add a set) 1.0.2.4 - 01 Nov 2007 - Added to the pictures Copy task also the bak and renamed to 'internal.general.iaa.copy' And removed to the local build.xml file. 1.0.3.1 - 01 Nov 2007 - Started to use the fileset id instead of the file filter. (First attemp). 1.0.4.1 - 05 Nov 2007 - Added all tasks in comment and edit zip- and print- target with selectors ad fileset references. 1.0.5.1 - 28 Jan 2008 - Copy files with file id instead of file filter. The internal.general.copy.id is the preferred way to copy files. --> <project name="common"> <!-- ======================================================= --> <!-- Properties for the common build --> <!-- ======================================================= --> <property environment="env" /> <!-- Versioning information --> <property name="common.version.number" value="1.0.5.1" /> <property name="common.version.date" value="28 Jan 2008" /> <property name="common.version.copy" value="HJMF 2000-2008"/> <property name="common.stopwatch" value="CommonWatch" /> <!-- 5.5 seconds or 5500 milliseconds is used. --> <property name="copy.granularity" value="5500" /> <property name="copy.preservelastmodified" value="true" /> <!-- ======================================================= --> <!-- Antiloppe or Ant Contrib --> <!-- V: 1.0.1.0 - Created --> <!-- ======================================================= --> <taskdef resource="net/sf/antcontrib/antlib.xml"> <classpath> <pathelement location="${env.ANT_HOME}\ant-contrib\lib\ant-contrib.jar"/> </classpath> </taskdef> <!-- ======================================================= --> <!-- Variables for the common build --> <!-- ======================================================= --> <var name="both" value="false" /> <!-- ======================================================= --> <!-- Classpath id reference definitions --> <!-- V: 1.0.1.0 - Created --> <!-- ======================================================= --> <path id="common.classpath"> <pathelement location="${env.CLASSPATH}" /> <pathelement location="./classes" /> </path> <!-- ======================================================= --> <!-- Example of a common.general.classpath (No-Good) --> <!-- ======================================================= --> <path id="common.general.classpath"> <pathelement location="${env.JAVA_HOME}/lib/dt.jar" /> <pathelement location="${env.JAVA_HOME}/lib/tools.jar " /> <pathelement location="e:/usr/jars/Speeltuin.jar" /> <pathelement location="E:/Apache/jakarta-oro-2.0.8/jakarta-oro-2.0.8.jar" /> <pathelement location="E:/Apache/logging-log4j-1.2.12/dist/lib/log4j-1.2.12.jar" /> </path> <!-- ======================================================= --> <!-- Gets the operation system and sets isXXX variables --> <!-- V: 1.0.1.0 - Created --> <!-- ======================================================= --> <target name="getos"> <!-- only one of the following will be set true --> <condition property="isWindoze"> <os family="windows"/> </condition> <condition property="isUnix"> <os family="unix"/> </condition> </target> <!-- ======================================================= --> <!-- General show utility, used to show settings used in --> <!-- common.xml. --> <!-- V: 1.0.1.0 - Created, 1.0.1.2 preservelastmodified --> <!-- 1.0.5.1 - Added environment variables --> <!-- ======================================================= --> <target name="internal.show.properties"> <echo>--------------- Common Used Properties --------------------------</echo> <echo>Common Version: ${common.version.number} - ${common.version.date}</echo> <echo>Common CR : ${common.version.copy}</echo> <echo>Granularity : ${copy.granularity}</echo> <echo>Last modified : ${copy.preservelastmodified}</echo> <echo>--------------- Environment Variables ---------------------------</echo> <echo>ANT_HOME : ${env.ANT_HOME}</echo> <echo>ANT_VERSION : ${env.ANT_VERSION}</echo> <echo>CLASSPATH : ${env.CLASSPATH}</echo> <echo>JAVA_HOME : ${env.JAVA_HOME}</echo> <echo>JAVA_VERSION : ${env.JAVA_VERSION}</echo> <echo>User name : ${env.USERNAME}</echo> <echo>Windows root : ${env.SystemRoot}</echo> <echo>Run Date-Time : ${TODAY_NL} (dutch)</echo> <echo>-----------------------------------------------------------------</echo> </target> <!-- ======================================================= --> <!-- Shows the settings of a sync for using the --> <!-- internal.general.copy with the filter method --> <!-- ======================================================= --> <target name="internal.show.sync.properties"> <propertycopy name="issp.message" from="${param}.message" /> <propertycopy name="issp.srcdir" from="${param}.srcdir" /> <propertycopy name="issp.todir" from="${param}.todir" /> <propertycopy name="issp.filter" from="${param}.filter" /> <propertycopy name="issp.verbose" from="${param}.verbose" /> <propertycopy name="issp.copydirection" from="${param}.copydirection" /> <echo>--------------- Common Sync Properties --------------------------</echo> <echo>Message : ${issp.message}</echo> <echo>Source dir : ${issp.srcdir}</echo> <echo>Destination : ${issp.todir}</echo> <echo>Verbose : ${issp.verbose}</echo> <echo>Filter : ${issp.filter}</echo> <echo>Direction : ${issp.copydirection}</echo> </target> <!-- General utility for checking if a drive is available. This routine is called by other ant tasks. The caller should use trycatch. If an exception is caught the drive is not available. @param param : Name of the base. Exact names are derived. @derived isAvailable : The availability of the drive. V: 1.0.1.0 - 25 Jun 2007 --> <target name="internal.test.availability"> <!-- <propertycopy name="isa.name" from="${param}.name" /> <echo>${isa.name}</echo> --> <propertycopy name="isa.isAvailable" from="${param}.isaDir" /> </target> <!-- General test utility, routine is called by other ant tasks. This test can only be used if the previous test has a succesful result. So first call 'internal.test.availability'. Tests the availability of a directory on a drive. The caller should use trycatch mechanism. If an exception is caught the drive is not available. @param param1 : Name of the base. Exact names are derived. @param param2 : Name of the directory. Exact name is derived. @derived isAvailable : The availability of the drive/directory. V: 1.0.1.0 - 25 Jun 2007 --> <target name="internal.test.availability.directory"> <propertycopy name="ita.isAvailable" from="${param1}.isaDir" /> <propertycopy name="ita.srcdir" from="${param2}.srcdir" /> <available file="${ita.srcdir}" type="dir" property="ita.isAvailable" /> <echo>${ita.srcdir} is ${ita.isAvailable}</echo> </target> <!-- General show utility, routine is called by other ant tasks. Before using this routine be sure isaDir is set to true or false, and has to be defined. @param param : Name of the base. Exact names are derived. @derived driveName : Full drive name description. @derived driveLetter : Driveletter belonging to the description @derived isAvailable : The availability of the drive. V: 1.0.1.0 - 25 Jun 2007 --> <target name="internal.show.availability" > <propertycopy name="isa.isAvailable" from="${param}.isaDir" /> <propertycopy name="isa.driveName" from="${param}.name" /> <propertycopy name="isa.driveLetter" from="${param}.letter" /> <if> <equals arg1="${isa.isAvailable}" arg2="true" /> <then> <echo>${isa.driveName} : available as ${isa.driveLetter}</echo> </then> <else> <echo>${isa.driveName} : NOT available!</echo> </else> </if> </target> <!-- General copy utility, routine is called by other ant tasks. This is a version using one param with fileset id. This is currently the prefered copy version. @param isDir Availability of the Source Drive @param message Message text for description of the action @param todir Destination drive and path location @param srcId RefID to a fileset. @param verbose Verbose operation V: 1.0.4.5 - 28 Jan 2008 - From scrage --> <target name="internal.general.copy.id"> <propertycopy name="igci.isDir" from="${param}.isDirSD1" /> <if> <equals arg1="${igci.isDir}" arg2="true"/> <then> <propertycopy name="igci.message" from="${param}.message" /> <propertycopy name="igci.srcId" from="${param}.srcId" /> <propertycopy name="igci.todir" from="${param}.todir" /> <propertycopy name="igci.message" from="${param}.message" /> <propertycopy name="igci.verbose" from="${param}.verbose" /> <copy todir="${igci.todir}" granularity="${copy.granularity}" preservelastmodified="${copy.preservelastmodified}" verbose="${igci.verbose}"> <fileset refid="${igci.srcId}"/> </copy> </then> <else> <echo>${igci.todir} is currently not available!</echo> </else> </if> </target> <!-- General copy utility, routine is called by other ant tasks. @param param Name of the base. Exact names are derived. @derived isDir Availability of the Destination Drive @derived message Message text for description of the action @derived todir Destination drive and path location @derived srcdir Source drive path location @derived verbose Verbose operation @derived filter Filter file name. V: 1.1.1.0 - 25 Jun 2007 - Granularity 1.1.1.1 - 02 Jul 2007 - preservelastmodified 1.1.2.1 - 03 Jul 2007 - isboth and both --> <target name="internal.general.copy" depends="isboth"> <propertycopy name="isa.isDir" from="${param}.isDirSD1" /> <if> <!-- equals arg1="${isa.isDir}" arg2="true"/--> <equals arg1="${both}" arg2="true" /> <then> <propertycopy name="isa.message" from="${param}.message" /> <propertycopy name="isa.srcdir" from="${param}.srcdir" /> <propertycopy name="isa.todir" from="${param}.todir" /> <propertycopy name="isa.filter" from="${param}.filter" /> <propertycopy name="isa.verbose" from="${param}.verbose" /> <echo>${isa.srcdir} --> ${isa.message} --> ${isa.todir}</echo> <copy todir="${isa.todir}" granularity="${copy.granularity}" preservelastmodified="${copy.preservelastmodified}" verbose="${isa.verbose}"> <fileset dir="${isa.srcdir}" > <include name="${isa.filter}" /> </fileset> </copy> </then> <else> <echo>${isa.todir} is currently not available!</echo> </else> </if> </target> <!-- Synchronize a directory beased on the sync rules. copydirection { "both", "a21", "12a" } @param param Name of the base. Exact names are derived. V: 1.0.1.1 - 25 Jun 2007 1.1.2.1 - 03 Jul 2007 - isboth and both --> <target name="internal.general.sync" depends="isboth"> <propertycopy name="igs.isDirSD1" from="${param}.isDirSD1" /> <propertycopy name="igs.isDirSD2" from="${param}.isDirSD2" /> <propertycopy name="igs.copydirection" from="${param}.copydirection" /> <propertycopy name="igs.message" from="${param}.message" /> <propertycopy name="igs.dir1" from="${param}.srcdir" /> <propertycopy name="igs.dir2" from="${param}.todir" /> <propertycopy name="igs.verbose" from="${param}.verbose" /> <propertycopy name="igs.filter" from="${param}.filter" /> <if> <!--equals arg1="${igs.isDirSD1}" arg2="true" /--> <equals arg1="${both}" arg2="true" /> <then> <switch value="${igs.copydirection}"> <case value="a2l"> <var name="do.the.copy" value="true" /> </case> <case value="both"> <var name="do.the.copy" value="true" /> </case> <case value="l2a"> <var name="do.the.copy" value="false" /> </case> <default> <fail message="Unvalid switch, aborting" /> </default> </switch> <if> <equals arg1="${do.the.copy}" arg2="true" /> <then> <antcall target="internal.general.copy.param"> <param name="param.isDir" value="${igs.isDirSD1}" /> <param name="param.message" value="${igs.message}, forward" /> <param name="param.srcdir" value="${igs.dir1}" /> <param name="param.todir" value="${igs.dir2}" /> <param name="param.verbose" value="${igs.verbose}" /> <param name="param.filter" value="${igs.filter}" /> </antcall> </then> </if> </then> </if> <if> <!--equals arg1="${igs.isDirSD2}" arg2="true" /--> <equals arg1="${both}" arg2="true" /> <then> <switch value="${igs.copydirection}"> <case value="a2l"> <var name="do.the.copy" value="false" /> </case> <case value="both"> <var name="do.the.copy" value="true" /> </case> <case value="l2a"> <var name="do.the.copy" value="true" /> </case> <default> <fail message="Unvalid switch, aborting" /> </default> </switch> <if> <equals arg1="${do.the.copy}" arg2="true" /> <then> <antcall target="internal.general.copy.param"> <param name="param.isDir" value="${igs.isDirSD2}" /> <param name="param.message" value="${igs.message}, back" /> <param name="param.srcdir" value="${igs.dir2}" /> <param name="param.todir" value="${igs.dir1}" /> <param name="param.verbose" value="${igs.verbose}" /> <param name="param.filter" value="${igs.filter}" /> </antcall> </then> </if> </then> </if> </target> <!-- General copy utility, routine is called by other ant tasks. This is a version using parameters version. Prefered usage for copying is 'internal.general.copy'. @param isDir Availability of the Source Drive @param message Message text for description of the action @param todir Destination drive and path location @param srcdir Source drive path location @param verbose Verbose operation @param filter Filter (since 1.0.4.5) V: 1.0.4.5 - 25 Jun 2007 - From older build.xml --> <target name="internal.general.copy.param"> <!-- <echo>${param.isDir}</echo> <echo>${param.message}</echo> <echo>${param.srcdir}</echo> <echo>${param.todir}</echo> <echo>${param.verbose}</echo> <echo>${param.filter}</echo> --> <if> <equals arg1="${param.isDir}" arg2="true"/> <then> <echo>${param.message}</echo> <copy todir="${param.todir}" granularity="${copy.granularity}" preservelastmodified="${copy.preservelastmodified}" verbose="${param.verbose}"> <fileset dir="${param.srcdir}" > <include name="**/*.*" /> </fileset> </copy> </then> <else> <echo>${param.todir} is currently not available!</echo> </else> </if> </target> <!-- Executes a doscmd. @param.dir : Path, directory where the cvommand is located @param.command : Command to be executed. --> <target name="internal.general.doscmd" description="Executes a command" > <echo>${env.windir}\system32</echo> <exec dir="${param.dir}" executable="cmd" failonerror="Errrror" > <arg line="${param.command}" /> </exec> </target> <!-- ======================================================= --> <!-- Performs the java command FileFind --> <!-- @param.dir : Path, directory --> <!-- @param.filter: Dos filter like *.* --> <!-- V: 1.0.1.2 - Created --> <!-- ======================================================= --> <target name="internal.general.java"> <java classname="com.frielink.nl.filefind.FileFind" classpathref="common.general.classpath"> <arg value="-d" /> <arg value="${param.dir}" /> <arg value="-f" /> <arg value="${param.filter}" /> </java> </target> <!-- ======================================================= --> <!-- Tools, Helptasks --> <!-- Sets the usage for date and time --> <!-- ======================================================= --> <target name="timestamp" description="Sets the the timestamp of this ant-task-execution"> <tstamp> <format property="TODAY_NL" pattern="dd MMM yyyy HH:mm:ss" locale="nl" /> <format property="TODAY_UK" pattern="yyyy MM dd HH:mm:ss" locale="uk" /> </tstamp> </target> <!-- ======================================================= --> <!-- Checks if both drives are available. --> <!-- Used by copy and sync. Be carefull param's usage! --> <!-- ======================================================= --> <target name="isboth"> <propertycopy name="isb.isDirSD1" from="${param}.isDirSD1" /> <propertycopy name="isb.isDirSD2" from="${param}.isDirSD2" /> <if> <equals arg1="${isb.isDirSD1}" arg2="true" /> <then> <if> <equals arg1="${isb.isDirSD2}" arg2="true" /> <then> <var name="both" value="true" /> </then> <else> <var name="both" value="false" /> </else> </if> </then> <else> <var name="both" value="false" /> </else> </if> </target> <!-- ======================================================= --> <!-- Prints a path in a readable format using the --> <!-- Using the line separator as cutter. --> <!-- ======================================================= --> <target name="internal.print.path" description="Prints/Shows the path in a readable format"> <propertycopy name="gpp.refid" from="param.refid" /> <pathconvert pathsep = "${line.separator}" property = "pretty.print.path" refid = "${gpp.refid}" /> <echo message= "${pretty.print.path}" /> </target> <!-- ======================================================= --> <!-- Prints the content of a fileset represented by an id. --> <!-- Using the line separator as cutter. --> <!-- ======================================================= --> <target name="internal.print.fileset" description="Prints/Shows the files in a fileset on a readable format"> <propertycopy name="gpf.refid" from="param.refid" /> <pathconvert pathsep = "${line.separator}" property = "pretty.print.fileset" refid = "${gpf.refid}" /> <echo message= "${pretty.print.fileset}" /> </target> <!-- ======================================================= --> <!-- Zips a fileset to a given zippfilename --> <!-- ======================================================= --> <target name = "internal.zip.fileset" description= "Creates a zip file"> <propertycopy name="izf.refid" from="param.refid" /> <zip destfile= "${param.destfile}" update = "${param.update}" comment = "${param.comment}" > <zipfileset refid= "${izf.refid}" /> </zip> </target> <!-- ======================================================= --> <!-- Starts a stopwatch --> <!-- ======================================================= --> <target name="startstopwatch"> <stopwatch name="${stopwatch.name}" /> </target> </project>