ant+svn简化打版本的方法(j2ee)

背景:

     本文维护的网站是使用weblogic部署的文件夹工程(非war包,jar包部署),上线后的升级版本管理工作。每次升级,只提交修改的类,页面。

    整个工作大体如下:SVN维护一个与生成环境同步的主干分支,业务人员提数一个需求,开发人员确认后,版本管理员从主干新建一个分支;

                                        开发人员完成开发,自测后,版本管理员合并分支修改到主干;

                                        然后,打升级版本,如果升级文件多的话,跳出修改文件是个麻烦的过程,尤其是类,即使使用很多技巧,还是觉得不够方便。

正文:

    1)获得修改文件的方法

         方法一:手动挑,这个。。。。。

         方法二:使用小乌龟,这种方法网上一搜,到处都是;

         方法三:使用ant获取,这是本文重点。这里先介绍一下思想:首先,svn客户端命令“log --xml -v -r ”获取版本修改记录的xml文档,然后使用propertyregex命令解析出修改文件列表并转成svn上的地址,最后下载文件。


<path id="project.classpath">
        <pathelement location="lib/svnjavahl.jar" />
        <pathelement location="lib/svnant.jar" />
        <pathelement location="lib/svnClientAdapter.jar" />
    </path>

    <!-- load the svn task -->
    <taskdef resource="svntask.properties" classpathref="project.classpath" />
    <taskdef resource="net/sf/antcontrib/antlib.xml">
        <classpath>
            <pathelement location="lib\ant-contrib-1.0b3.jar" />
        </classpath>
    </taskdef>

    <!-- path to your webroot -->
    <property name="temp.dir" value="tmp" />
<!--svn版本号--》
    <property name="startingRevision" value="2187" />
    <property name="endingRevision" value="2187" />

    <!-- url to svn repository -->
    <property name="svn.repoURL" value="svn工程路径" />
    <property name="svn.base" value="/code/se_manage/trunk/se_manage/" />
    <property name="svn.username" value="chengfulai" />
    <property name="svn.password" value="chengfulai" />

    <!-- export Exports given revision from the given repository URL to temp.dir -->
    <target name="exportCode"
        description="Exports given revision from the given repository URL to temp.dir">
        <delete dir="${temp.dir}" />
        <echo>
            **************************************
        </echo>

        <mkdir dir="${temp.dir}" />

        <!-- creates log in an xml file for revision x to xx -->
        <exec executable="svn" outputproperty="svnlog.out" output="${temp.dir}\log.xml">
            <arg
                line="log --xml -v -r ${startingRevision}:${endingRevision} ${svn.repoURL}" />
        </exec>

        <xmlproperty file="${temp.dir}\log.xml"
            collapseattributes="true" />

        <propertyregex property="directory.path" input="${log.logentry.paths.path}"
            regexp="${svn.base}" casesensitive="false" replace="/" />

        <echo>${directory.path}</echo>

        <for list="${directory.path}" param="val3">
            <sequential>
                <mkdir dir="${temp.dir}/@{val3}" />
                <delete dir="${temp.dir}/@{val3}" />
            </sequential>
        </for>

        <for list="${directory.path}" param="val2">
            <sequential>

                <available file="" filepath="${temp.dir}@{val2}" type="dir"
                    property="your.file.path.here.present" />

                <if>
                    <equals arg1="${your.file.path.here.present}" arg2="true" />
                    <else>
                        <!--<get src="${svn.repoURL}@{val2}" dest="${temp.dir}@{val2}" username="${svn.username}"
                            password="${svn.password}" ignoreerrors="true"/> -->
                        <!--<get src="${svn.repoURL}@{val2}" dest="${temp.dir}@{val2}"
                            verbose="true" ignoreerrors="true" />-->
                        <svn  username="chengfulai" password="chengfulai" javahl="false" failοnerrοr="false" svnkit="true">
                            <export srcUrl="${svn.repoURL}@{val2}" revision="HEAD" destPath="${temp.dir}@{val2}" />
                        </svn>
                    </else>
                </if>
                <var name="your.file.path.here.present" unset="true" />
            </sequential>
        </for>
    </target>


    2)获得升级版本

         拿到修改文件后,如果包含.java文件需要编译一下,这是第二个重点。思想:首先对整个工程编译,然后打成一个jar包放到lib里去,追后对步骤1中的文件夹编译,就可以拿到升级文件啦。这个就不写了,无非是javac,jar等简单命令。


    3)备份待升级文件

           升级文件难免出错,对需要升级的文件做下备份是必不可少的。思路:首先,使用dos命令获取带升级文件夹的文件列表,同时增加头尾,变成一个xml文件,这样的话,就可以再使用步骤1中的方法三,从ftp上下载文件。不足之处:该方法只能拿到修改的文件,因此,出错回滚时不能删除本次升级新增的文件。del D:\test\filelist.txt;

bat命令,生成修改文件列表

del D:\test\filelistXML.xml;
dir C:\Users\chengfulai-ghq\Desktop\se_manage\updateFile\se_manage /s /b >D:\test\filelist.txt
@echo off&SetLocal EnableDelayedExpansion
echo ^<?xml version="1.0" encoding="UTF-8"?^> ^<log^>>> D:\test\filelistXML.xml
for /f "delims=" %%i in (D:\test\filelist.txt) do (if not defined %%i set %%i=A & echo %%i>>tmp.tmp)
for /f %%i in ('type tmp.tmp') do (
Set a=%%i
    Set b=!a:\=/!
    echo ^<path^>!b!^</path^>>>D:\test\filelistXML.xml)
del tmp.tmp
echo ^</log^>>> D:\test\filelistXML.xml

根据上边的列表下载,获得备份

<!-- path to your webroot -->
    <!--整个备份用文件夹地址-->
    <property name="folder.repoURL" location="C:/Users/chengfulai-ghq/Desktop/bak-sm-test/" />
    <!--辅助文件地址,最好不要放在c盘-->
    <property name="XML.repoURL" location="D:\test\filelistXML.xml" />
    <!--文件部署地址,用户名,口令-->
    <property name="ftp.repoURL" value="用户名:密码@ip地址:weblogic上的发布链接" />
    <!--备份文件地址-->
    <property name="local.repoURL" location="bak\" />
    <property name="temp.bak" value="bak" />

    <path id="project.classpath">
        <pathelement location="lib/svnjavahl.jar" />
        <pathelement location="lib/svnant.jar" />
        <pathelement location="lib/svnClientAdapter.jar" />
    </path>
    <!-- load the svn task -->
    <taskdef resource="svntask.properties" classpathref="project.classpath" />
    <taskdef resource="net/sf/antcontrib/antlib.xml">
        <classpath>
            <pathelement location="lib\ant-contrib-1.0b3.jar" />
        </classpath>
    </taskdef>

    <target name="XML">
        <exec executable="getXML.bat" failοnerrοr="false">
        </exec>
    </target>

    <!-- load the svn task -->
    <taskdef resource="svntask.properties" classpathref="project.classpath" />
    <taskdef resource="net/sf/antcontrib/antlib.xml">
        <classpath>
            <pathelement location="lib\ant-contrib-1.0b3.jar" />
        </classpath>
    </taskdef>

    <target name="bak" depends="XML">
        <delete dir="${temp.bak}" />
        <mkdir dir="${temp.bak}" />
        <!--readTheXMl-->
        <xmlproperty file="${XML.repoURL}" collapseattributes="true" />
        <echo>1111111111111111111111111-readTheXML--111111111111111111111111111</echo>
        <!--getTheFilePath-->
        <!--修改regexp成:整个备份用文件夹地址-->
        <propertyregex property="directory.path" input="${log.path}" regexp="C:/Users/chengfulai-ghq/Desktop/se_manage/updateFile/" casesensitive="false" replace="/" />
        <echo>22222222222222222222222222-getTheFilePath--22222222222222222222222222</echo>
        <!--makeTheFolder-->
        <for list="${directory.path}" param="val3">
            <sequential>
                <mkdir dir="${temp.bak}/@{val3}" />
                <delete dir="${temp.bak}/@{val3}" />
            </sequential>
        </for>
        <echo>33333333333333333333333-makeTheFolder--33333333333333333333333</echo>

        <for list="${directory.path}" param="val2">
            <sequential>

                <available file="" filepath="${temp.bak}@{val2}" type="dir" property="your.file.path.here.present" />

                <if>
                    <equals arg1="${your.file.path.here.present}" arg2="true" />
                    <else>
                                <scp file="${ftp.repoURL}@{val2}" todir="${local.repoURL}/@{val2}" trust="true" failοnerrοr="false"/>
                    </else>
                </if>
                <var name="your.file.path.here.present" unset="true" />
            </sequential>
        </for>
    </target>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值