在网上查了很多资料,发现都没有介绍原理,只是生搬硬套,很容易搞错,却不知错在哪里。通过研究ANT,SVN,SVNANT等几方面的原始英文文档,这里准备详细说明一下。
首先,说一下我的配置:
ANT ,1.8.4
SVN, 1.7.8
SVNANT:1.3.1 ,
时间:2012.12.22(传说中的玛雅人预测的世界末日)。
ANT 想要和SVN集成到一起,其实至少有以下三种方案:
方案一:直接利用ANT 的命令 <exec> 来完成。
需要注意的是,这需要在运行ANT的机器上安装SVN,同时,此种方式严重依赖操作系统。
下面以WINDOWS为例。
<?xml version="1.0" encoding="UTF-8"?>
<project name="test">
<property name="svn-url" value="svn://localhost"></property>
<target name="hello">
<echo message="hello ant!"></echo>
<exec executable="svn" > //<!-- 直接调用 svn.exe,注意svn.exe要能够通过path访问到-->
<arg line="co ${svn-url}/test1/src test2/src"/> <!-- 设置svn 的命令行参数 -->
</exec>
</target>
</project>
怎么样,还是挺简单吧?!
方案二:利用SVNANT中的SVNKIT
注意:本方案和方案三都需要把SVNANT解压后的所有JAR包都放入ANT\LIB目录下,方便查找使用。
<?xml version="1.0" encoding="UTF-8"?>
<project name="test">
<property name="svn-url" value="svn://localhost"></property>
<property name="basedir" value="d:/apache-ant-1.8.2/lib"></property>
<path id="path.svnant"> <!-- 定义一个PATH元素,告诉ANT 到哪找SVNANT的类库 -->
<pathelement location="${basedir}/svnant.jar"/> <!-- SVNANT顶层包-->
<pathelement location="${basedir}/svnClientAdapter.jar"/> <!-- SVNANT 与SVN通讯的适配器包--> <pathelement location="${basedir}/svnjavahl.jar"/> <!-- SVNANT与SVN 通讯的JAVA BRIDGE包-->
<!-- ... -->
</path>
<typedef
resource="org/tigris/subversion/svnant/svnantlib.xml"
classpathref="path.svnant"
/> <!--引用 svnantlib.xml ,其中定义了ANT的SVN命令,见下方详解。-->
<svnSetting id="svn.settings" <!--定义svnSetting ,新的设置SVN属性方式-->
svnkit="true" <!-- 通过SVNKIT模式(即设置为TRUE),而不是JAVAHL模式-->
javahl="false"
username=""
password=""
/>
<target name="hello">
<echo message="hello ant!"></echo>
<svn refid="svn.settings"> <!--引用上面定义的svnSetting ,新的设置SVN属性方式-->
<checkout recurse="true" url="${svn-url}/test1/src" destPath="test2/src" /> <!-- 执行checkout 命令-->
</svn>
<echo message="success!"></echo>
</target>
</project>
方案三:利用SVNANT中的JAVAHL
<?xml version="1.0" encoding="UTF-8"?>
<project name="test">
<property name="svn-url" value="svn://localhost"></property>
<property name="basedir" value="d:/apache-ant-1.8.2/lib"></property>
<path id="path.svnant">
<pathelement location="${basedir}/svnant.jar"/>
<pathelement location="${basedir}/svnClientAdapter.jar"/>
<pathelement location="${basedir}/svnjavahl.jar"/>
<!-- ... -->
</path>
<typedef
resource="org/tigris/subversion/svnant/svnantlib.xml"
classpathref="path.svnant"
/>
<svnSetting id="svn.settings"
svnkit="false"
javahl="trues" <!-- 通过JAVAHL模式(即设置为TRUE),而不是SVNKIT模式-->
username=""
password=""
/>
<target name="hello">
<echo message="hello ant!"></echo>
<svn refid="svn.settings">
<checkout recurse="true" url="${svn-url}/test1/src" destPath="test3/src" />
</svn>
<echo message="success!"></echo>
</target>
</project>
怎么样,还算简单吧?希望各位能够轻松应用ANT,把自己从重复工作中解脱出来。
首先,说一下我的配置:
ANT ,1.8.4
SVN, 1.7.8
SVNANT:1.3.1 ,
时间:2012.12.22(传说中的玛雅人预测的世界末日)。
ANT 想要和SVN集成到一起,其实至少有以下三种方案:
方案一:直接利用ANT 的命令 <exec> 来完成。
需要注意的是,这需要在运行ANT的机器上安装SVN,同时,此种方式严重依赖操作系统。
下面以WINDOWS为例。
<?xml version="1.0" encoding="UTF-8"?>
<project name="test">
<property name="svn-url" value="svn://localhost"></property>
<target name="hello">
<echo message="hello ant!"></echo>
<exec executable="svn" > //<!-- 直接调用 svn.exe,注意svn.exe要能够通过path访问到-->
<arg line="co ${svn-url}/test1/src test2/src"/> <!-- 设置svn 的命令行参数 -->
</exec>
</target>
</project>
怎么样,还是挺简单吧?!
方案二:利用SVNANT中的SVNKIT
注意:本方案和方案三都需要把SVNANT解压后的所有JAR包都放入ANT\LIB目录下,方便查找使用。
<?xml version="1.0" encoding="UTF-8"?>
<project name="test">
<property name="svn-url" value="svn://localhost"></property>
<property name="basedir" value="d:/apache-ant-1.8.2/lib"></property>
<path id="path.svnant"> <!-- 定义一个PATH元素,告诉ANT 到哪找SVNANT的类库 -->
<pathelement location="${basedir}/svnant.jar"/> <!-- SVNANT顶层包-->
<pathelement location="${basedir}/svnClientAdapter.jar"/> <!-- SVNANT 与SVN通讯的适配器包--> <pathelement location="${basedir}/svnjavahl.jar"/> <!-- SVNANT与SVN 通讯的JAVA BRIDGE包-->
<!-- ... -->
</path>
<typedef
resource="org/tigris/subversion/svnant/svnantlib.xml"
classpathref="path.svnant"
/> <!--引用 svnantlib.xml ,其中定义了ANT的SVN命令,见下方详解。-->
<svnSetting id="svn.settings" <!--定义svnSetting ,新的设置SVN属性方式-->
svnkit="true" <!-- 通过SVNKIT模式(即设置为TRUE),而不是JAVAHL模式-->
javahl="false"
username=""
password=""
/>
<target name="hello">
<echo message="hello ant!"></echo>
<svn refid="svn.settings"> <!--引用上面定义的svnSetting ,新的设置SVN属性方式-->
<checkout recurse="true" url="${svn-url}/test1/src" destPath="test2/src" /> <!-- 执行checkout 命令-->
</svn>
<echo message="success!"></echo>
</target>
</project>
方案三:利用SVNANT中的JAVAHL
<?xml version="1.0" encoding="UTF-8"?>
<project name="test">
<property name="svn-url" value="svn://localhost"></property>
<property name="basedir" value="d:/apache-ant-1.8.2/lib"></property>
<path id="path.svnant">
<pathelement location="${basedir}/svnant.jar"/>
<pathelement location="${basedir}/svnClientAdapter.jar"/>
<pathelement location="${basedir}/svnjavahl.jar"/>
<!-- ... -->
</path>
<typedef
resource="org/tigris/subversion/svnant/svnantlib.xml"
classpathref="path.svnant"
/>
<svnSetting id="svn.settings"
svnkit="false"
javahl="trues" <!-- 通过JAVAHL模式(即设置为TRUE),而不是SVNKIT模式-->
username=""
password=""
/>
<target name="hello">
<echo message="hello ant!"></echo>
<svn refid="svn.settings">
<checkout recurse="true" url="${svn-url}/test1/src" destPath="test3/src" />
</svn>
<echo message="success!"></echo>
</target>
</project>
怎么样,还算简单吧?希望各位能够轻松应用ANT,把自己从重复工作中解脱出来。