How to Use SVN Tasks with ANT
Join the DZone community and get the full member experience.
Join For FreeThis post is about using ANT to perform some of the most common source-control related tasks such as export, tagging, and branching. I am using ANT version 1.7.0 and SVN Ant version 1.1-rc3, bound against Subversion 1.4.0.
The related software can be downloaded here:
- SVN Ant = http://subclipse.tigris.org/svnant.html
- ANT = http://ant.apache.org/
I shall start with build.properties, which lists a few key/value pairs used in our SVN Ant task build file, referred as svn-tasks.xml:
Content of build.properties:
####START of SVN Properties ####svn.repository.url=http://xyz.com/repos/somereponamesvn.project.base.path=someprojectnamesvn.username=user name to access reposvn.password=password to access repo#This shall be name of the tag, #This property should always be updated before build starts#This property shall be used to exporttag.name=SOME_TAG_NAME_12222008#This shall be name of new branch, #this property should be used only when new branch is to be creatednew.branch.name=NEW_BRANCH_12222008####END of SVN Properties ####
Content of svn-tasks.xml:
<property file="build.properties"></property><!-- SVN and SVN-ANT Tasks properties --><property name="svn.repository.url" value="${svn.repository.url}"/><property name="svn.project.base.path" value="${svn.project.base.path}" /><property name="svn.base.url" value="${svn.repository.url}/${svn.project.base.path}"/><property name="svnant.lib.dir" location="svn-ant-lib"/><property name="svnant.javahl" value="false" /><property name="svnant.svnkit" value="true" /><!-- SVN and SVN-ANT Tasks properties --><!-- *************************************************************** --><!-- Set-Up of SVN-ANT classpath --><!-- *************************************************************** --> <path id="svnant.classpath"> <fileset dir="${svnant.lib.dir}"> <include name="**/*.jar" /> </fileset></path><!-- *************************************************************** --><!-- Loading of SVN task --><!-- *************************************************************** --> <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" /><!-- *************************************************************** --><!-- tool-availability: Determine if SVN-ANT is available. --><!-- *************************************************************** --> <target name="tool-availability"> <available resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" property="available.svnant" /> <echo message="SVN-ANT is available = ${available.svnant}"/></target><!-- **************************************************************** --><!-- does-svnant-exist: depends on tool-availablility and --> <!-- displays error message --><!-- ***************************************************************** --><target name="does-svnant-exist" depends="tool-availability"> <fail unless="available.svnant"> SVN-ANT is not available, cannot perform tagging or checkout/export svn ant task. </fail> </target><!-- ****************************************************************** --><!-- svntag: performs tagging using properties from --><!-- build.properties and uses SVNANT tasks --><!-- ******************************************************************* --><target name="svntag" description="tags individual project using svnant task"> <property name="svn.tag.message" value="Tagging Project ${project.name} with tag name ${tag.name} from trunk "/> <property name="src.url" value="${svn.base.url}/${project.name}/trunk/"/> <property name="dest.url" value="${svn.base.url}/${project.name}/tags/${tag.name}"/> <echo message="${svn.tag.message}"/> <echo message="${src.url}"/> <echo message="${dest.url}"/> <svn javahl="${svnant.javahl}" svnkit="${svnant.svnkit}" username="${svn.username}" password="${svn.password}"> <copy srcUrl="${src.url}" destUrl="${dest.url}" message="${svn.tag.message}"/> </svn> </target><!-- ****************************************************************** --><!-- svnexport: performs export using properties from --><!-- build.properties and uses SVNANT tasks --><!-- ****************************************************************** --><target name="svnexport" description="exports individual project using svnant task"> <property name="svn.tag.message" value="Exporting Project ${project.name} with tag name ${tag.name}"/> <property name="src.url" value="${svn.base.url}/${project.name}/tags/${tag.name}"/> <property name="destPath" value="${dest.path}"/> <echo message="${svn.tag.message}"/> <svn javahl="${svnant.javahl}" svnkit="${svnant.svnkit}" username="${svn.username}" password="${svn.password}"> <export srcUrl="${src.url}" destPath="${destPath}/${project.name}"/> </svn> </target><!-- ****************************************************************** --><!-- svnbranch: creates a new branch using properties from --><!-- build.properties and uses SVNANT tasks --><!-- ****************************************************************** --><target name="svnbranch" description="creates a new branch for individual project using svnant task"> <property name="svn.branch.message" value="Creating new branch for Project ${project.name} with new branch name ${new.branch.name} from trunk"/> <property name="src.url" value="${svn.base.url}/${project.name}/trunk/"/> <property name="dest.url" value="${svn.base.url}/${project.name}/branches/${new.branch.name}"/> <echo message="${svn.branch.message}"/> <echo message="${src.url}"/> <echo message="${dest.url}"/> <svn javahl="${svnant.javahl}" svnkit="${svnant.svnkit}" username="${svn.username}" password="${svn.password}"> <copy srcUrl="${src.url}" destUrl="${dest.url}" message="${svn.branch.message}"/> </svn> </target>
Opinions expressed by DZone contributors are their own.
Comments