`

ant部署

 
阅读更多
Ant的原名为Another neat tool,翻译过来为另外一个干净的工具,在Java程序的开发中,ant是一个极好的助手。Ant使用XML格式的文件作为其运行的脚本,xml已经被大多数组织承认为通用的数据交换协议,具有容易阅读,编写,修改等良好的特性,被大多数人所接受。Ant运行的XML脚本文件中的每个元素都代表一个动作,ant通过动作调用相应的程序来执行任务,完成用户的操作。执行命令是ant的基本目标,把完成一项任务所需的命令按照正常的顺序写入ant脚本文件,ant调用脚本顺序执行,便可以完成一项大的任务。脚本具有一次完成编写,多次使用的特性,适合可重复的,顺序完成的任务。本篇文章的目的是讲述如何根据ant的特性和优点、结合实际的项目节约时间和成本的一个例子。
              项目的来源,某个下午,公司经过两个月的bug修改(主要的工作不是修改,有空就修改),所有已经提交到bug库的bug都已经处理,版本的发布也到了最后期限,在查看了所有已经修改的bug并督促提交bug的人员进行检察之后,作者向技术总监提出构建一个新的版本,经过技术总监的批准,作者督促开发人员把所有的修改都提交到版本控制系统svn中,团队进行短暂的休息。在这个期间,把svn中的最新内容复制到发布分支中(关于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>
以上是打包使用的所有脚本,相应的注释也比较多,如果有不清楚的地方欢迎垂询,如果您有更好的方法,欢迎批评指正。
作者简介:凌辉 北京****科技发展有限公司 物流 软件开发部 项目经理,数据库方向研究生学历,设计开发过多个J2EE应用程序,有丰富的软件开发、管理、测试经验,擅长网站应用程序开发,在设计模式,软件重构,版本控制,软件保护,数据库设计与管理等方面都有独特的见解。

转自http://tianli.blog.51cto.com/190322/98040
分享到:
评论

相关推荐

    Ant部署WebService服务

    在"Ant部署WebService服务"中,我们需要了解以下核心知识点: 1. **Ant基础**: - Ant是一个基于XML的脚本语言,其配置文件通常命名为`build.xml`,其中定义了构建过程的各种任务(tasks)。 - `build.xml`中的...

    weblogic下ant部署的demo

    【标题】"WebLogic下Ant部署的Demo"是关于如何使用Apache Ant自动化工具在Oracle WebLogic服务器上部署应用程序的一个示例。这个demo旨在简化和优化WebLogic环境中的部署流程。 【描述】WebLogic是一个功能强大的...

    myeclipse中的ant部署

    ### MyEclipse中的Ant部署详解 #### 一、前言 在进行软件开发的过程中,构建工具扮演着重要的角色。Ant作为一款成熟的Java项目构建工具,因其简单易用且功能强大而受到众多开发者的青睐。本文将详细介绍如何在...

    ant部署示例代码

    总的来说,这个"ant部署示例代码"提供了一个了解和学习Ant基本用法的机会,对于Java开发者来说,掌握Ant的使用有助于提高构建效率,尤其是在大型项目中,它可以有效地自动化各种重复性的构建任务。

    JBOSS用ANT部署.doc

    【JBoss 用 ANT 部署详解】 在IT行业中,JBoss是一个广泛使用的开源Java应用服务器,它支持Java EE规范,包括EJB(Enterprise JavaBeans)。ANT是Apache项目的一个构建工具,它允许开发者通过XML配置文件来自动化...

    使用ant部署eclipse开发的web工程到tomcat

    首先,让我们理解标题"使用ant部署eclipse开发的web工程到tomcat"所涉及的核心概念。Eclipse是一款广泛使用的Java集成开发环境(IDE),用于开发各种Java应用程序,包括Web应用。Tomcat是Apache软件基金会的一个开源...

    ant部署tomcat

    在提供的文件名中,"ant部署tomcat.txt"可能是记录整个Ant部署流程的文档,"ant复制svn部署到tomcat.txt"可能详细阐述了如何利用Ant与SVN交互并部署到Tomcat的过程,而"ant部署tomcat涉及svn.txt"则可能专门讨论了...

    ant部署远程服务器

    在IT行业中,Ant是一个常用的构建自动化工具,尤其在Java项目中,它被广泛用来编译、测试、打包和部署应用程序。本教程将详细介绍如何利用Ant在Eclipse集成开发环境中部署远程Tomcat服务器上的Web应用。 首先,理解...

    springboot ant部署

    标题中的“Springboot Ant部署”指的是使用Apache Ant工具来构建和部署Spring Boot应用程序的过程。Spring Boot是基于Spring框架的高度简化和快速开发的工具,而Ant是Java项目常用的构建工具,它允许开发者通过XML...

    ant部署文件

    在"ant部署文件"中,我们通常会看到以下关键组成部分: 1. **build.xml**:这是Ant的主要配置文件,包含了整个项目构建、测试和部署的步骤。文件中定义了各种目标(target),每个目标代表一个特定的构建任务,如...

    Ant远程部署tomcat脚本

    《Ant远程部署Tomcat脚本详解》 Apache Ant是一个基于Java的构建工具,它通过XML文件定义任务,用于自动化项目的构建、部署和管理。在Java Web开发中,Ant经常被用来打包、测试和部署Web应用。本文将详细介绍如何...

    ant远程上传并部署tomcat

    标题中的“ant远程上传并部署tomcat”是指使用Apache Ant工具执行自动化构建任务,将本地的Web应用(如WAR或EAR文件)传输到远程Linux服务器的Tomcat应用服务器上进行部署,并随后重启Tomcat服务以使更改生效。Ant是...

    用Ant实现Java项目的自动构建和部署

    本文将深入讲解如何利用Ant来实现Java项目的自动构建和部署,包括对J2ME和J2EE项目的处理。我们将通过两个简单实例,一步步引导你熟悉Ant的使用。 首先,理解Ant的基本概念是至关重要的。Ant是一个基于XML的构建...

    [转]使用Ant管理配置Weblogic

    通过这种方式,开发者可以创建一个可重复使用的Ant构建文件,从而实现Weblogic服务器的自动化管理和部署,这对于大型企业级应用的持续集成和持续部署(CI/CD)过程至关重要。 【标签】:“源码”可能指的是Ant脚本...

    weblogic-ant相关

    ### WebLogic Server与Ant部署相关知识点 #### 一、WebLogic Server简介 Oracle WebLogic Server是Oracle公司提供的一款中间件产品,主要用于构建企业级应用程序。它支持多种开发框架和技术标准,如Java EE...

    ant+tomcat

    1. "tomcat的任务需要管理者的用户名和密码.doc":这可能涉及到在Ant脚本中配置Tomcat服务器的管理凭据,例如,当通过Ant部署应用到Tomcat时,可能需要提供管理员的用户名和密码来访问管理端口或管理接口,如Manager...

    ant打包部署工具,官方下载

    Ant是Apache软件基金会下的一个开放源代码项目,它是一个基于Java的构建工具,主要用于自动化构建、测试和部署Java应用程序。Ant以其灵活性和可扩展性在Java开发者中广受欢迎,它通过XML格式的构建文件(build.xml)...

    ant 小例子ant 小例子

    在描述的"ant部署struts小例子"中,可能会有一个`build.xml`文件,这是Ant的主配置文件。在这个文件中,会有`&lt;target&gt;`标签定义不同的任务,如编译源码、生成JAR或WAR包。 2. **编译源码**:使用`&lt;javac&gt;`任务编译...

Global site tag (gtag.js) - Google Analytics