下面是打包的步骤:
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>
<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>