根據Eclipse SVN changelog使用ANT自動打增量包


1、獲取changeLog

  用eclipseSVN的插件功能查看history。

  

  將日志文件導出到本地文件svn_change.log,格式如下

  

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

----------------------------------------------------------------------------

2、ANT腳本的編寫,基本原理是讀取changeLog.txt,首先過濾將注釋,提交人..等等不需要的信息過濾掉。導入到新文件patch.log。在讀取此文件根據正則表達式處理沒效的目錄,在替換成真實編譯后的classes目錄。將.java替換成*.class后綴。*是為了通配符。匹配內部類。如何根據文件復制到新目錄下。在根據此打包。就基本完成功能了。

  無效信息過濾后文件內容

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腳本

<?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目錄下就會生成補丁包了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM