Over a million developers have joined DZone.

How to Use SVN Tasks with ANT

· Agile Zone

Reduce testing time & get feedback faster through automation. Read the Benefits of Parallel Testing, brought to you in partnership with Sauce Labs.

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>

The Agile Zone is brought to you in partnership with Sauce Labs. Discover how to optimize your DevOps workflows with our cloud-based automated testing infrastructure.

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

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

{{ parent.tldr }}

{{ parent.urlSource.name }}