Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

How to Use SVN Tasks with ANT

DZone's Guide to

How to Use SVN Tasks with ANT

· Agile Zone ·
Free Resource

You've been hearing a lot about agile software development, get started with the eBook: Agile Product Development from 321 Gang

This 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:

  1. SVN Ant = http://subclipse.tigris.org/svnant.html
  2. 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>

Download the free agile tools checklist from 321 Gang. This guide will help you choose the right agile tools to position your team for success. 

Topics:
java ,ant ,subversion ,source control ,agile

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}