一、獲取changeLogcss
用eclipseSVN的插件功能查看history。java
將日誌文件導出到本地文件svn_change.log,格式以下web
r63 | xiaodaoshi | 2014-08-08 18:01:36 CST Changed paths: M /root/Testproject/ANT_DEMO/demo/src/com/csdn/common/util/StringUtil.java M /root/Testproject/ANT_DEMO/demo/src/com/csdn/service/First.java A /root/Testproject/ANT_DEMO/demo/src/com/csdn/service/Second.java M /root/Testproject/ANT_DEMO/demo/src/com/csdn/service/Third.java M /root/Testproject/ANT_DEMO/demo/webapps/demo/welcome/welcome.jsp M /root/Testproject/ANT_DEMO/demo/webapps/demo/images/welcome.png <description>測試</description> xds9527 ----------------------------------------------------------------------------
二、ANT腳本的編寫,基本原理是讀取changeLog.txt,首先過濾將註釋,提交人..等等不須要的信息過濾掉。導入到新文件patch.log。在讀取此文件根據正則表達式處理沒效的目錄,在替換成真實編譯後的classes目錄。將.java替換成*.class後綴。*是爲了通配符。匹配內部類。如何根據文件複製到新目錄下。在根據此打包。就基本完成功能了。正則表達式
無效信息過濾後文件內容express
webapps/demo/WEB-INF/classes/com/csdn/common/util/StringUtil*.class webapps/demo/WEB-INF/classes/com/csdn/service/First*.class webapps/demo/WEB-INF/classes/com/csdn/service/Second*.class webapps/demo/WEB-INF/classes/com/csdn/service/Third*.class webapps/demo/welcome/welcome.jsp webapps/demo/images/welcome.png
下面是完整的ANT腳本app
<?xml version="1.0" encoding="UTF-8"?> <project name="project" default="patch_without_compile"> <!-- TLBADX 項目 --> <property name="project.name" value="demo" /> <tstamp><format property="date.today" pattern="yyyyMMdd" /></tstamp> <!-- svn提交change日誌 --> <property name="change.log" value="./changeLog.txt" /> <!-- 補丁包所在目錄 --> <property name="build.dir" value="./release" /> <!-- 讀取svn日誌提取出新增和修改文件 獲取補丁包包含的文件 --> <property name="patch.includesfile" value="${build.dir}/patchfiles.txt" /> <!-- 補丁包名稱 --> <property name="dest.zip" value="${project.name}_${date.today}_patch.zip" /> <!-- - - - - - - - - - target:從svn日誌中,取出checkin文件 - - - - - - - - - --> <target name="patchfile" depends="init" description="處理 svn_changge 日誌 "> <!-- 去掉 SVN日誌中的註釋,只保留Added和Modified記錄 --> <concat destfile="${patch.includesfile}" append="false" force="true"> <fileset file="${change.log}" /> <filterchain> <containsregex byline="true" pattern="^([\s]+)(?:A|M)([\s]+)(.+)$" replace="\3" /> </filterchain> </concat> <!-- 將src目錄替換爲classes目錄 主要針對提交的代碼 --> <replaceregexp file="${patch.includesfile}" byline="true"> <!-- (?:X) X做爲非捕獲組 至關於java的group概念 提取出代碼的相對路徑 --> <regexp pattern="^/.+/(?:src)/(.+)\..+$" /> <substitution expression="webapps/toolbar/WEB-INF/classes/\1*.class" /> </replaceregexp> <!-- 替換掉WebRoot/前面的路徑 主要針對提交.js .css 等圖片頁面文件 --> <replaceregexp file="${patch.includesfile}" byline="true"> <!-- (?=X) 從句子前面讀取 若是X前面爲空直接略過。 前面不爲空的執行替換操做 --> <regexp pattern="^/.+/(?=webapps/)" /> <substitution expression="" /> </replaceregexp> </target> <!-- - - - - - - - - - target:package - - - - - - - - - --> <target name="package" description="補丁包"> <delete dir="${build.dir}/webapps" /> <copy todir="${build.dir}" overwrite="true"> <fileset dir="." includesfile="${patch.includesfile}" /> </copy> <delete file="${build.dir}/${dest.zip}" /> <zip destfile="${build.dir}/${dest.zip}" compress="true"> <zipfileset prefix="webapps" dir="${build.dir}/webapps"> <include name="**" /> </zipfileset> </zip> </target> <!-- - - - - - - - - - target:release without compile - - - - - - - - - --> <target name="patch_without_compile" depends="patchfile, package" description="--> release"> <echo>補丁包打包結束</echo> </target> <!-- - - - - - - - - -target: init - - - - - - - - - --> <target name="init" depends="clean"> <mkdir dir="${build.dir}"/> </target> <!-- - - - - - - - - -target: clean - - - - - - - - - --> <target name="clean"> <delete dir="${build.dir}" /> </target> </project>
這樣的話獲取版本changeLog.txt,執行ANT腳本。在release目錄下就會生成補丁包了。eclipse