• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            教父的告白
            一切都是紙老虎
            posts - 82,  comments - 7,  trackbacks - 0
            摘要:
              Subversion是越來越被廣泛使用的版本管理工具,使用Ant腳本從Subversion獲取代碼,實現(xiàn)Daily Build。
              1.Subversion概述
              先引用Version Control with Subversion 中開頭的話:
              “If C gives you enough rope to hang yourself, think of Subversion as a sort of rope storage facility.” 
               —Brian W. Fitzpatrick
              然后告訴大家CVS是舊愛,Subversion是新歡。列舉若干Subversion的特性和優(yōu)勢為證,懶得寫了,直接看這里:Subversion的老家
              關(guān)于如何使用Subversion以及相關(guān)客戶端軟件,網(wǎng)上慢慢看吧,官方自由圖書不錯。
              2.螞蟻出場
              團隊最近的項目中即使用Subversion作為版本控制工具。Daily Build過兩天就得搭建起來了,上螞蟻!
              Tigris.org提供了Subclipse,SvnClientAdapter和SvnAnt。(見這里)
              Subclipse是一個Eclipse的插件,實現(xiàn)了IDE與Subversion得集成;
              SvnClientAdapter是Subversion的一套Java API,封裝了客戶端對Subversion的一些訪問操作;
              SvnAnt是用于訪問Subversion的Ant任務,其依賴于SvnClientAdapter。
              我要用的就是SvnAnt,用SVN Check Out一份SvnAnt的代碼:
               
               
               
               
               svn co http://subclipse.tigris.org/svn/subclipse/trunk/svnant/ svnant
               
               
               
               
              在這個工程里面還包括svnant的Ant Task使用說明文檔,也可以在這里直接查看。
              使用其中的build.xml編譯SvnAnt后,在新生成的build子目錄下會生成svnant.jar。按照官方文檔的說法,把這個svnant.jar和SvnAnt工程的lib目錄下的svnClientAdapter.jar和svnjavahl.jar拷貝到Ant的目錄下即可。然后編寫如下的Ant腳本進行測試:
               
               
               
               
               <?xml version="1.0"?>
               <project name="SVN Ant Test" default="checkout" basedir=".">
               <!-- 1 -->
               <property name="remote.url"
               value="svn://16.157.xxx.xxx/trunk/LNPORTAL/src/P3UIPAdapter/" />
               <property name="local.dir" value="local" /> 
               <!-- 2 -->
               <taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask" />
               <target name="prepare"
               description="Prepare the dirs for other tasks">
               <delete dir="${local.dir}" />
               <mkdir dir="${local.dir}" />
               </target>
               <!-- 3-->
               <target name="checkout" depends="prepare">
               <svn javahl="true" username="lihq" password="password" >
               <checkout url="${remote.url}" destPath="${local.dir}" />
               </svn>
               </target>
               </project>
               
               
               
               
              測試結(jié)果暫時不重要。
              3.JavaSVN出場
              SvnAnt的執(zhí)行依賴SvnClientAdapter,而執(zhí)行訪問SVN時又有兩種形式:其一是通過SVN 命令行程序的形式進行的(我在想:如果是這樣,還不如使用Ant的exec任務呢);其二是通過Javahl來執(zhí)行的。
              Javahl是一個用于訪問Subversion的Java接口(估計是JNI),這需要Windows機上有svnjavahl.dll才行。團隊的Daily Build的并不是Windows,于是求助JavaSVN,這是一個純Java的SVN解決方案。
              請訪問這個Guide:Making SvnAnt use JavaSVN
              我的實際步驟如下:
              Step 1:從Ant的lib目錄下移除SvnClientAdapter.jar,我沒有發(fā)現(xiàn)javahl.jar,于是便移除了svnjavahl.jar,其實移不移后者無所謂;
              Step 2:在剛才那個頁面下載javasvn.jar和javasvn-javahl.jar,以及JavaSVN的svnClientAdapter-0.9.32.jar。并把這三個jar都拷貝到Ant的lib目錄下;
              然后運行上面寫的SVN Ant測試腳本,結(jié)果如下:
               
               
               
               …
               BUILD FAILED
               java.lang.AbstractMethodError: org.tigris.subversion.svnant.Feedback.logRevision(J)V
               
               Total time: 7 seconds
               
               
               
              雖然SVN的代碼都取下來了,但最后Ant會拋出一個如上的錯,這會使得Ant腳本無法運行后面的任務。
              4.Thanks Open Source
              看來,大概是JavaSVN用自己的svnClientAdapter-0.9.32.jar改變了SVNAnt本來對調(diào)用。SVNAnt(by Tigris.org)原先是調(diào)用svnjavahl.jar來運行SVN命令的。替換svnClientAdapter-0.9.32.jar后,SVNAnt(plus JavaSVN)是調(diào)用javasvn-javahl.jar和javasvn.jar來運行SVN命令的。上面那個錯誤大概就是兩套svnClientAdapter對某個抽象方法的定義不完全一致造成的,估計是API版本對應的問題。解決如下:
              首先查看svnant.jar的源代碼,發(fā)現(xiàn)org.tigris.subversion.svnant.Feedback是實現(xiàn)svnClientAdapter.jar中的一個名為ISVNNotifyListener的接口。這個接口中對報錯的logRevision方法的定義是:
               
               
               
               
               public abstract void logRevision(long revision, String path)
               
               
               
               
              而查看svnClientAdapter-0.9.32.jar中的ISVNNotifyListener的接口中的定義是:
               
               
               
               
               public abstract void logRevision(long revision)
               
               
               
               
              明顯不匹配,于是修改svnant.jar的源代碼,修改org.tigris.subversion.svnant.Feedback,象其中添加一個方法如下:
               
               
               
               
               //This method is added by Beegee
               public void logRevision(long revision) {
               }
               
               //This method is the original one by SVNANT
               public void logRevision(long revision, String path) {
               }
               
               
               
               
              然后重新編譯SVNAnt,生成svnant.jar,拷貝替換Ant 的lib目錄下的同名jar,重新運行以上SVN Ant測試腳本,結(jié)果如下:
              

              OK!
             ?。璭nd-
            posted on 2010-04-09 11:20 暗夜教父 閱讀(509) 評論(0)  編輯 收藏 引用 所屬分類: JAVA

            <2010年4月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            日本人妻丰满熟妇久久久久久| 国内精品九九久久久精品| 久久久网中文字幕| 国产精品久久久香蕉| av无码久久久久不卡免费网站| 91精品国产综合久久久久久| 久久精品这里只有精99品| 久久久久久久波多野结衣高潮| 亚洲中文久久精品无码ww16| 亚洲欧美精品伊人久久| 国产精品久久久香蕉| 99久久精品国产毛片| 久久精品无码午夜福利理论片| 国产成人久久精品麻豆一区 | 久久WWW免费人成—看片| 精品久久久久成人码免费动漫| av午夜福利一片免费看久久| 久久伊人精品一区二区三区| 精品久久久久中文字| 久久精品国产久精国产思思| 一级a性色生活片久久无| 久久久久亚洲精品无码网址| 久久精品一区二区国产| 亚洲精品高清国产一线久久| 精品国产一区二区三区久久蜜臀 | 久久99精品国产一区二区三区| 性高朝久久久久久久久久| 日本精品久久久久中文字幕8| 亚洲人成精品久久久久| 久久伊人五月丁香狠狠色| 无码精品久久一区二区三区 | 精品视频久久久久| 国产无套内射久久久国产| 91精品观看91久久久久久| 国产A级毛片久久久精品毛片| 久久精品国产影库免费看| 国产午夜精品理论片久久影视 | 一本色道久久综合| 中文成人久久久久影院免费观看| 亚洲国产成人久久一区久久| 中文字幕无码av激情不卡久久|