使用Ant与批处理命令实现java程序自动化版本构建


1、          版本构建简介

Ø      一个误解:版本构建就是编译。这只是版本构建的一个方面,版本构建还应该包括:代码更新,远程部署,单元测试等。

Ø      广义的版本构建是和自动测试联系在一起的,就是保证每天的版本能正常运行,并能通过自动测试。

Ø      我们目前的版本构建目的有两个:一个是给测试人员提供合适的版本进行测试,另外一个就是约束开发人员每天checkin的代码是有效的(从编译层面上)。

2、          ANT工具

Ant是一个基于JAVA的跨平台的构建工具。具有如下特点:

•        语法简单,使用xml脚本。

•        运行速度快。

•        可以集成其他工具,如:ClearCase,JUIT等。

•        可扩展性,可以自定义任务。

•        易于部署,通过FTP,COPY等任务进行部署。

•        可以调用任意其他可执行程序。

ANT脚本结构

Ø      搭建环境:将ant工具包拷贝到任意指定的目录,设置ANT_HOME    环境变量,将$ANT_HOME/bin目录添加到path环境变量中

Ø      脚本结构:

   <project name=“build_server” default=“all”> --工程      

       <targetname=“compile”>             --目标

           <javac srcdir=“.”/>                --任务

       </target>

     </project> 

其中一个脚本文件包括一个工程,一个工程可以包括多个目标,目标之间可以具有依赖关系,一个目标可以包括多个任务。  

Ø      脚本执行:通过命令行ant –f filename 

          ant默认执行的文件为:build.xml

ANT命令行选项介绍

•         ant –h 帮助

•         ant –version 显示版本信息

•         ant –f filename 指定构建的文件

•         ant –logger classname 指定日志记录程序

•         ant –l filename指定记录的日志文件名

•         ant –verbose 详细的构建过程信息

•         ant –propertyfile filename 指定属性文件名

举例:

ant –logger org.apache.tools.ant.listener.Maillogger –ldailybuild.log -verbose

ANT核心任务之javac

•         任务说明:javac是最核心的任务,用于编译源码

•         实例:<javac srcdir="${src.dir}"destdir="${build.dir}" debug="on"              debuglevel="lines,vars,source">

                     <classpathrefid="vendorclasspath"/>

              </javac>

•         属性说明:

•         srcdir:指定源代码的目录位置

•         destdir:指定编译后的class存放目录位置,若不对destdir进行设置

    默认class和源代码放置相同位置。

•         debug:debug的编译开关

•         debuglevel:debug级别。(从日志的异常能定位到代码的行数,就是因为这个选项设置的,否则其结果就是unknown resource)

•         classpath :指定编译代码引用的外部lib目录

ANT核心任务之jar

•         任务说明:jar任务用于将编译的class文件打成jar文件

•         实例:

       <jardestfile="${jar.dir}/common.jar">

              <filesetdir="${build.dir}">

                     <includename="**/*.*"/>

                     <excludename="**/*.txt"/>

              </fileset>

       </jar>

•         属性说明:

       destfile:指定打成jar文件的存放目录和文件名。

       fileset:用于指定该jar文件包含(include)的文件和不包含(exclude)的文件。

ANT核心任务之文件和目录操作

•         任务说明:makedir,copy,delete这几个任务用于创建目录,拷贝文件,删除文件

•         实例:<mkdir dir="build/classes"/>

                 <delete dir="${build.dir}"/>

                 <copy file="${jar.dir}/common.jar"                                 todir="${application.dir}/lib">

                 </copy >

•         属性说明

       dir:待操作的目录

       todir:拷贝的目的目录

ANT核心任务之ftp

•         任务说明:ftp任务主要用于远程部署

实例:

<ftp server="${deploy.ftp.ip}"remotedir="${jboss.server.omcr.lib}"userid="${deploy.ftp.username}" password="${deploy.ftp.password}"binary="true" verbose="true" action="put">

<filesetdir="${application.lib.dir}/report">

<include name="*.*"/>

<excludename="_desktop.ini"/>

</fileset>

   </ftp>           

  <echo>FTP部署完成,现在时间是:${now}</echo>

属性说明:

        server和remotedir都使用相对路径, userid 和password在build.properties中均有定义。各服务器部署得jboss,用户名和密码会相应不同,在此文档中修改

ANT核心任务之exec

•         任务说明:该任务用于执行其他可执行程序。

•         实例:

       <execdir="."        executable="dailylabel_night.bat"/>

       </exec>

•         属性说明:

         dir:指定待执行程序目录。

    executable:可执行文件的全名

ANT扩展任务之ccupdate

•         任务说明:该任务是调用clearcase的update命令,进行代码更新。

•         实例:<ccupdate cleartooldir="${cctool.dir}/bin"                            viewpath="${codeview.dir}"graphical="false"            log="update.log"   overwrite="true"                               currenttime="true"rename="false">

               </ccupdate >

•         属性说明:

       viewpath:待更新视图的路径。

       graphical:是否显示图形化信息。

       log:更新过程日志文件。

       overwrite:是否覆盖。

ANT其他任务介绍

ant:构建一个子工程。

java:运行java程序。

junit:运行单元测试。

javadoc:生成java的doc文件。

echo:打印信息。

telnet:远程登录。

可以参考ant的帮助文档,一般你所需要的都提供了。

一个实际的版本构建过程

自动构建包括的功能和应用到的ant任务

•        定时构建         --操作系统定时任务实现,每个版本每天两次

•        清除临时文件      -- ant中的delete任务,保证不同时间编译不冲突

•        初始化目录结构   -- ant中的mkdir任务,创建构建过程用到的各种目录

•        更新代码          -- ant中ccupdate任务,保证编译采用的是最新代码

•        编译代码         -- ant中javac任务,编译源代码

•        自动打包              -- ant中jar任务

•        自动部署               -- ant中ftp任务

•        自动打标签            -- ant中exec任务调用CC的mklabel命令。CC的工具

•        邮件通知构建结果 -- ant中MailLogger属性。通过设置参数实现

•        自动备份构建结果 -- ant中的copy,ftp任务。保证构建过程都有备份。

编写自己的构建脚本

l      通常,构建脚本应包括以下步骤:

ü      设置构建属性

ü      更新代码

ü      初始化

ü      编译

ü      打包

ü      部署

ü      清除

l      关键点:目录的规划

l      脚本编写要领:

ü      易于移植

ü      可配置

ü      易维护

3、          批处理命令

•         批处理程序(也称为批处理文件)可以简化日常的或重复的任务。批处理程序是无格式的文本文件,它包含一条或多条命令,文件扩展名为 .bat 或 .cmd。当在命令提示符下键入文件名时,文件中的命令将顺序执行。

•         任何命令均可以包含在批处理文件中。此外,for、goto 和 if 命令允许有条件地处理批处理文件中的命令。例如,if 命令根据条件语句的结果来执行命令。其他命令允许您控制输入输出以及调用其他批处理程序。可替换参数 % 扩展了批处理脚本参数变量。

批处理命令:Call

•         作用

–        从一个批处理程序调用另一个批处理程序,而不使父批处理程序停止。call 命令现在将标签接受为调用的目标。

•         语法:

–        call [drive:][path]filename [batch-parameters]

–        call :label [arguments]

•         参数说明:

–        [drive:][path]filename 指定要调用的批处理程序的位置和名称。filename参数必须具有 .bat 或 .cmd 扩展名。

–        batch-parameters 指定批处理程序所需要的任何命令行信息。

批处理命令:For

•         作用:

–        对一组文件中的每个文件运行指定的命令。可以在批处理程序中或直接从命令提示符使用 for 命令。

•         语法:

–        for %%variable in (set) docommand[command-parameters]

–        要在命令提示符下使用 for,请使用以下语法:

–        for %variable in (set) docommand [command-parameters]

•         参数说明:

–        %%variable%variable :代表可替换的参数。for 命令使用在set 中指定的每个文本字符串替换 %%variable(或 %variable),直到此命令(在command-parameters 中指定)处理所有的文件为止。使用 %% variable 在批处理程序中执行for 命令。使用% variable 通过命令提示符执行 for 命令。变量名区分大小写。

–        (set) 指定要用指定的命令处理的一个或多个文件或文本字符串。需要括号。

–        command 指定要在指定的 set 所包含的每个文件上执行的命令。

–        command-parameters :指定要用于指定命令(如果指定的命令要使用任何参数或开关)的任何参数或开关。

批处理命令:%(可替换参数)

•         作用:

–        可替换参数 %0 和 %1 到 %9 可以放在批文件的任何位置。批处理文件运行时,%0 由批处理文件名替换,并且参数变量 %1 到 %9 由命令行上输入的相应参数替换。

–        % 参数扩展了批处理脚本参数变量 (%0, %1, ..., %9),如下所示:

–        批处理脚本中的 %* 是引用所有参数的通配符。对于单个参数变量,扩展选项如下表所述。

批处理命令:%(可替换参数扩展选项)

变量

描述

%~1

扩展 %1 并删除所有引号 (")

%~f1

将 %1 扩展到完全合格的路径名

%~d1

将 %1 扩展到驱动器盘符

%~p1

将 %1 扩展到路径

%~n1

将 %1 扩展到文件名

%~x1

将 %1 扩展到文件扩展名

%~s1

扩展的路径仅包含短名称

%~a1

将 %1 扩展到文件属性

%~t1

将 %1 扩展到文件日期/时间

%~z1

将 %1 扩展到文件大小

%~$PATH:1

搜索 PATH 环境变量中列出的目录,并将 %1 扩展到发现的第一个目录的完全合格的名称。如果没有定义环境变量名称,或搜索没有找到文件,则此修改键扩展成空字符串。

批处理命令:%组合用法

修改程序可以合并以获得复杂的结果:

变量(使用合并的修改程序)

说明

%~dpI

只将 %I 展开到驱动器号和路径

%~nxI

只将 %I 展开到文件名和扩展名

%~fsI

将 %I 展开到只包含短名称的完整路径名

%~dp$PATH:I

在 PATH 环境变量所列出的目录中搜索 %I,并展开到第一个找到结果的驱动器号和路径

%~ftzaI

将 %I 扩展到与 dir 相似的输出行

编写简单批处理程序

l      对于Java程序的运行来说,核心有两个

Ø       运行时环境,由JAVA_HOME定义;

Ø       运行时lib库,由CLASS_PATH定义;

l      简单的lib库的处理方法

l      复杂的lib库的处理方法

批处理程序实例

set TMP_CLASSPATH_=%CLASSPATH_%

if not "%JAVA_HOME%" = ""     goto NEXT

@if exist %CURRENT_PATH%jdk1.4 

set JAVA_HOME=%CURRENT_PATH%jdk1.4

cd ..

if "%JAVA_HOME%" =""         set JAVA_HOME=%CD%\jdk1.4

:NEXT

for %%i in (%0) do cd /d %%~dpi\..

set CLASSPATH_=%CLASSPATH_%

for %%i in (.\ui.jar) do call".\bin\cpappend.bat" %%i

for %%i in (".\lib\report\*.jar")do call ".\bin\cpappend.bat" %%i

set CLIENT_CLASSPATH_=%CLASSPATH_%

set CLASSPATH_=%TMP_CLASSPATH_%

start %JAVA_HOME%\bin\javaw -cp"%CLIENT_CLASSPATH_%" -Xms128m-Xmx512m com.ccit.omcr.ui.main.UiApplication

•         cappend.bat内容:

set CLASSPATH_=%CLASSPATH_%;%1

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值