从SVN中取出最新的版本

下面是打包的步骤:

1.SVN中取出最新的版本,
2.编译源文件,到web-inf/classes
3.把源文件夹中包含的.txt,.xml,.dat,.dll,.properties中所有文件复制到classes中相应得位置
4.把其他的radio文件复制到webroot
5.替换配置文件中的IP地址为127.0.0.1
到 此为止所有的可以运行的jsp已经准备完毕,下面需要处理数据库部分,数据部分需要把数据库中的一个表中的字段的内容全部清0,以特定身份导出为特定的文 件名,再恢复数据库中的某个字段的所有值。技术总监告诉我,以前的做法是导出这个表,执行update命令修改标志,导出数据,删除表,最后导入表。整个 过程需要进行数据的导入导出,作者感觉比较麻烦,考虑到oracle数据库有一种创建表的方法是类似创建,可以在导出之前类似创建这个表BACK,从源表 选择数据插入到back中,导出所有的数据,截断源表,从back表中选择数据插入到源表,毕竟在数据库中的操作要快一点。
当所有的数据都准备好之后,便可以通过运行打包命令进行打包了,打包的程序使用网上免费的基于java的izpack程序,该打包程序的使用也很简单,把需要的文件复制到相应的位置,运行它的命令便可以得到一个jar文件,在有jre的环境中双击就可以完成程序的安装,这个步骤在此不作介绍。打包的程序需要运行多次,一个好的做法是每次打包完毕,就把打包过程中生成的文件删除掉,除了最终的压缩包,因此在脚本程序的结束部分需要进行清理,删除所有的临时文件。
整个打包过程可以在无人值守的情况下完成打包工作,并且不容易出现错误,总共需要10分钟的时间,。以前打包都是人工完成,并且只有技术总监能记得所有的步骤,每次打包都需要30-60分钟,如果遗漏了什么,时间会更长。把ant打包脚本部署在一台比较陈旧的机器上运行即可完成任务,节省了资源、提高了工作效率,减少了出错的概率,大包花费的时间减少到0,并且任何人都可以通过双击一个命令来完成打包操作,使得打包不再成为技术总监的负担,简单,高效,准确,快捷是技术总监对这个打包脚本的最后评价。
下面介绍整个打包脚本的每一个部分
属性的设置部分:
  <property name= "app.home" value= "." />
    <property file= "build.properties" />
    <property name= "svn.repository.user" value= "tianli" />
    <property name= "svn.repository.password" value= "tianli" />
    <property name= "replace.token" value= "88.1.16.100" />
    <property name= "replace.value" value= "127.0.0.1" />
 
    <property name= "6ksoftsca.home" value= "${app.home}/6ksoftsca" />
    <property name= "dist.home" value= "${app.home}/dist" />
    <property name= "L_SCA3.home" value= "${app.home}/../L_SCA3" />
 
    <property name= "src.home" value= "${6ksoftsca.home}/src" />
    <property name= "classes.home" value= "${6ksoftsca.home}/WebRoot/WEB-INF/classes" />
 
    <!-- 必须 . 如果没有提示找不到 svn task 这个文件在 svnant.jar 文件中 , 只要把相应的 jar 文件放到 ANT_HOME 中就可以了 -->
    <taskdef name= "svn" classname= "org.tigris.subversion.svnant.SvnTask" />
定义类的编译路径
        <path id= "compile.path" >
       <pathelement location= "${classes.home}" />
       <fileset dir= "${6ksoftsca.home}/WebRoot/WEB-INF/lib" >
           <include name= "*.jar" />
           <include name= "*.zip" />
       </fileset>
    </path>
  svn 检出最新的代码:
    <target name= "export" depends= "prepare" description= "export all source data from Head revision" >
       <echo> 开始从 ${svn.repository.url} 检出源码 ... </echo>
       <svn javahl= "false" username= "${svn.repository.user}" password= "${svn.repository.password}" >
           <!--checkout url="${svn.repository.url}" destPath="${build.home}"/-->
           <export srcUrl= "${svn.repository.url}" destPath= "${6ksoftsca.home}" revision= "HEAD" />
       </svn>
       <echo> ${svn.repository.url} 检出源码成功 .... </echo>
    </target>
编译源代码:
<target name= "compile" description= "compile all src file" depends= "export" >
       <mkdir dir= "${classes.home}" />
       <echo message= " 正在编译源文件 ...." />
       <javac srcdir= "${src.home}" destdir= "${classes.home}" >
           <classpath refid= "compile.path" />
       </javac>
       <echo message= " 编译源文件成功 ...." />
    </target>
 
准备复制的数据
<target name= "build" depends= "compileProduct" description= "prepare to deploy" >
       <copy todir= "${classes.home}" >
           <fileset dir= "${product.home}" >
              <include name= "**/*.properties" />
              <include name= "**/*.prop" />
              <include name= "**/*.xml" />
           </fileset>
       </copy>
       <copy todir= "${classes.home}/images" >
           <fileset dir= "${images.home}" />
       </copy>
       <copy todir= "${classes.home}/icon" >
           <fileset dir= "${icon.home}" />
       </copy>
    </target>
构建 \ 处理 网站的文件
    <target name= "build" description= "build all files" depends= "compile" >
       <echo message= " 正在复制配置文件到 WEB-INF/classes...." />
       <copy todir= "${classes.home}" >
           <fileset dir= "${src.home}" >
              <include name= "*.dat" />
              <include name= "**/*.xml" />
              <include name= "*.properties" />
              <include name= "*.dll" />
              <include name= "*.txt" />
           </fileset>
       </copy>
       <echo message= " 正在复制 radio 文件夹的内容 ...." />
       <copy todir= "${6ksoftsca.home}/WebRoot/radio" >
           <fileset dir= "${app.home}/radio" />
       </copy>
       <echo message= " 正在检查文件的内容 ...." />
       <replace file= "${classes.home}/config.xml" token= "${replace.token}" value= "${replace.value}" />
       <replace file= "${classes.home}/hibernate.cfg.xml" token= "${replace.token}" value= "${replace.value}" />
       <replace file= "${6ksoftsca.home}/WebRoot/report/design/common.rptlibrary" token= "${replace.token}" value= "${replace.value}" />
    </target>
导出数据库
<target name= "dataHandle" depends= "build" >
       <echo message= " 正在备份并清除 S_Systemdesc 的标志 ...." />
       <exec executable= "cmd" >
           <arg value= "/c" />
           <arg value= "sqlplus sca/sca@${oracle_serviceName} @backupSystemFlag.sql" />
       </exec>
       <echo message= " 正在导出 S_Systemdesc 的数据 ...." />
       <exec executable= "cmd" >
           <arg value= "/c" />
           <arg value= "exp sca/sca@${oracle_serviceName} file=sca.dmp" />
       </exec>
 
       <echo message= " 正在恢复 S_Systemdesc 的数据 ...." />
       <exec executable= "cmd" >
           <arg value= "/c" />
           <arg value= "sqlplus sca/sca@${oracle_serviceName} @restoreSystemFlag.sql" />
       </exec>
    </target>
移动文件并打包:
<target name= "dist" description= " 部署文件 " depends= "dataHandle" >
       <echo message= " 覆盖应用 ${classes.home}/lic.dat...." />
       <delete file= "${classes.home}/lic.dat" />
       <copy todir= "${classes.home}" >
           <fileset dir= "${L_SCA3.home}/" >
              <include name= "lic.dat" />
           </fileset>
       </copy>
       <echo message= " 移动 ${6ksoftsca.home}/WebRoot ${L_SCA3.home}/plats..." />
       <move todir= "${L_SCA3.home}/plats" >
           <fileset dir= "${6ksoftsca.home}/WebRoot" />
       </move>
       <echo message= " 移动 sca.dmp...." />
       <move todir= "${L_SCA3.home}" >
           <fileset dir= "${app.home}" >
               <include name= "sca.dmp" />
           </fileset>
       </move>
       <echo message= " 开始打包 ..." />
       <exec executable= "package.bat" />
       <move todir= "${dist.home}" >
           <fileset dir= "${L_SCA3.home}" >
              <include name= "install_ALL.jar" />
           </fileset>
       </move>
       <antcall target= "clean" />
    </target>
清除临时文件:
<target name= "clean" >
       <echo message= " 清除临时文件 ..." />
       <echo message= " 删除 ${L_SCA3.home}/sca.dmp...." />
       <delete file= "${L_SCA3.home}/sca.dmp" />
       <echo message= " 删除 ${L_SCA3.home}/plats..." />
       <delete dir= "${L_SCA3.home}/plats" />
       <echo message= " 删除 ${6ksoftsca.home} 文件夹 ..." />
       <delete dir= "${6ksoftsca.home}" />
    </target>
 
 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
<?xml version="1.0"?>
<project default="run-test">
   
    <property name="tmp.dir" location="tmp"></property>
    <property name="src.dir" location="src"></property>
    <property name="test.dir" location="test"></property>
    <property name="lib.dir" location="lib"></property>
    <property name="build.dir" location="build"></property>
    <property name="build.classes" location="${build.dir}/classes"></property>
    <property name="build.report" location="${build.dir}/report"></property>
   
    <path id="compile-path">
        <fileset dir="${lib.dir}" includes="**/*.jar"></fileset>  

    </path>
   
    <path id="test-compile-path">
        <path refid="compile-path"></path>
        <pathelement location="${build.classes}"/>
    </path>
   
    <target name="clean">
        <delete dir="${src.dir}"></delete>
        <delete dir="${test.dir}"></delete>
        <delete dir="${build.dir}"></delete>
    </target>
   
    <target name="init" depends="clean">
        <mkdir dir="${build.dir}"/>
        <mkdir dir="${build.classes}"/>
        <mkdir dir="${build.report}"/>
    </target>
   
    <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="compile-path" />
   
    <target name="checkout" depends="init">
        <mkdir dir="${tmp.dir}"/>
       
        <svn username="lili" password="lili">
            <checkout url="http://10.10.72.203/svn/project" destPath="${tmp.dir}" revision="HEAD"/>   
        </svn>
       
        <copy todir="${src.dir}">
            <fileset dir="${tmp.dir}/src" includes="**/*.java" />
        </copy>
       
        <copy todir="${test.dir}">
            <fileset dir="${tmp.dir}/test" includes="**/*.java" />
        </copy>
       
        <!--
        <copy todir="${lib.dir}">
            <fileset dir="${tmp.dir}/lib" includes="**/*.jar" />
        </copy>
        -->
       
        <delete dir="${tmp.dir}"/>
    </target>

    <target name="compile" depends="init,checkout">
        <javac srcdir="${src.dir}" destdir="${build.classes}" classpathref="compile-path"></javac>
   
        <copy todir="${build.classes}">
            <fileset dir="${src.dir}" excludes="**/*.java"></fileset>
        </copy>
           
    </target>
   
    <target name="test-compile" depends="compile">
        <javac srcdir="${test.dir}" destdir="${build.classes}" classpathref="test-compile-path"></javac>
    </target>
   
    <target name="run-test" depends="test-compile">
        <junit>
            <classpath refid="test-compile-path"></classpath>
            <formatter type="xml" usefile="true"/>
           
            <batchtest todir="${build.report}">
                <fileset dir="${build.classes}" includes="**/*Test.*"></fileset>
            </batchtest>
           
        </junit>
       
        <junitreport todir="${build.report}">
            <fileset dir="${build.report}" includes="TEST-*.xml"></fileset>
            <report format="frames" todir="${build.report}/html"/>
        </junitreport>
    </target>

    <target name="mail">
        <mail mailhost="smtp.163.com" mailport="25" user="test" password="test">
            <from address="[email protected]"/>
            <to address="[email protected]"/>
            <message>This email is auto generated by ant</message>
            <fileset dir="${build.report}">
                <include name="**/*.*"/>
            </fileset>
        </mail>
    </target>
   
</project>

猜你喜欢

转载自ssydxa219.iteye.com/blog/1956577