Ant,你太给力了!(续)

经过两周的联调,后台终于调通了,进入到QA阶段,不能再随心所欲的部署了。代码必须要从SVN上取。改进了一下原来的脚本。

Ant 本身只有CVS任务,没有SVN支持。调研了一下,大概有两种方法从SVN check out 代码。

第一种方式是利用svnant,另一种则利用SVNKit命令行。

 

1、Svnkit

http://svnkit.com/download.php

SVNKit是一个纯Java的工具,它实现了所有的Subversion功能,并提供API来与Subversion协同工作,访问和操作Subversion版本库。

<!-- *************************************************************** -->
<!-- 首先需要引入Svnkit的包 ganymed.jar, svnkit.jar,svnkit-cli.jar 是必须的-->
<!-- *************************************************************** -->

<path id="SVNLib">
    <fileset dir="${ANT_HOME}/lib/" includes="*.jar"/>
</path>

<target name="svnCheckout">
    <property name="source-root" value="/usr/src"/>
    <property name="repository.URL" value="https://xxx.xxx.xxx"/>

    <java classname="org.tmatesoft.svn.cli.SVN" dir="${source-root}/TEST" fork="true" failonerror="true">
        <arg value="co"/>
        <arg value="--username"/>
        <arg value="${svnuser}"/>
        <arg value="--password"/>
        <arg value="${svnpassword}"/>
        <arg value="-N"/>
        <arg value="${repository.URL}/TESTING"/>
    <classpath refid="SVNLib"> </classpath>
    </java>
</target>

 

2、SvnAnt

http://subclipse.tigris.org/svnant.html

SvnAnt 继承自Ant任务,实现了Subversion版本控制功能。在svnClientAdapter的帮助下,<svn>任务使用javahl 或者
svn命令行工具来实现版本控制。SvnAnt支持大多数的主要Subversion命令。

####START of SVN Properties ####
svn.repository.url=http://xyz.com/repos/somereponame
svn.project.base.path=someprojectname
svn.username=user name to access repo
svn.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 export
tag.name=SOME_TAG_NAME_12222008
#This shall be name of new branch,
#this property should be used only when new branch is to be created
new.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>

<!-- ****************************************************************** -->
<!-- Prepare the bulid resource. -->
<!-- QA: svnCheckout. -->
<!-- ******************************************************************* -->
<target name="svnCheckout" description="Checking out files from a repository using svnant task">
    <property name="svn.checkout.message" value="Checking out Project ${project.name} from trunk. " />
    <property name="app.url" value="${svn.repository.url}/${svn.project.base.path}" />
    <echo message="${svn.checkout.message}" />
    <echo message="${app.url}" />

    <svn javahl="${svn.javahl}" svnkit="${svn.svnkit}" username="${svn.username}" password="${svn.password}">
        <!-- Java source code -->
        <checkout url="${app.url}/src" destPath="${deploy.src}" />
        <!-- Other resource -->
        <checkout url="${app.url}/${webAppDir}" destPath="${deploy.build}" />
    </svn>
</target>

你可能感兴趣的:(ant,svnkit,职场,休闲,SVNANT)