一直想讓項目的編譯自動化,因爲代碼服務器使用的是SVN,同時腳本用的是ANT,就涉及到如何在ANT中來訪問SVN,checkout/commit/update/export 等。
在網上查了不少資料,發現都沒有介紹原理,只是生搬硬套,很容易搞錯,殊不知錯在哪裏。經過研究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,把本身從重複工做中解脫出來。