项目自动化之道-1.使用ant进行单步建构

来源:互联网 发布:linux杀进程 编辑:程序博客网 时间:2024/04/30 18:42

      俗话说,遍身罗绮者,不是养蚕人。我们为别人写程序,缺陷有时间让我们自己的工序自动化。如果可以让计算机承担更多的更复杂的周期任务,我们将会有更多的时间做更有价值的工作。自动化可使用shell脚本,构建文件,配置和自动构建工具,并不在于多么深入学习这些,而是要综合考虑学习成本和自动化之后效率的提升。一般来说,现在花功夫学习这些自动化工具,对此后的开发是有很大好处的。

      这一系列的总结文章,是程序员修炼三部曲的项目自动化之道的学习笔记。按照目录,大体上分为单步构建、定时构建、按键发布、安装与部署、监控五个步骤(方面)来记录。本系列拟以一个简单的数据库读写程序为例说明自动化全过程。本文对序言和单步构建部分进行总结。

      序言中的例子,生动而全面地说明了项目自动化的应用场景,已经应用之后的效用。总结出来项目自动化的三种类型是为:命令自动化(例如javac编译的自动化),定时自动化(定是编译和构建)和触发自动化(错误触发信息发送)。我们可能需要知道这些知识才能进行项目自动化:版本控制,自动化测试,脚本编写,通信工具。一般而言所有你手工执行了两遍以上的任务都可以被自动化。

      单步构建:所谓单步构建就是采用脚本来执行所有需要手动执行的步骤。类似与学习菜谱的步骤来做菜。原则为:CRISP,即:complete,repeatable(版本控制来保证),informative,scheduable(后台执行),portable(不依赖特定IDE、机器IP、目录)五个属性。注意这里的构建不同于IDE里的编译,因为团队中的IDE配置不尽相同,没有办法保证编译和构建的一致性。

      对于一个项目来说,版本控制部分包括这个项目的源码,测试代码与第三方库。当然构建脚本也应该置于版本控制之下。我们模拟一个小项目userview来说明项目自动化。Userview读取一个仅有三列数据的数据表显示在console上。

      首先建立项目目录d:\www.gongqingkui.cn\userview\,目录结果在Eclipse下如图所示:


      生成的代码和测试代码都输出到build文件夹下,代码生成到prod目录下,测试生成到test目录下。下面我们开始手动构建过程。首先构建build文件夹。Cmd下执行mkdir build命令新建文件夹。使用javac编译命令遍以上述代码:javac -dbuild/prod src/userview/*.java将src/userview/下代码全部编译到build/prod下。javac-classpathvendor/lib/junit.jar;vendor/lib/sqljdbc4.jar;vendor/lib/mysql-connector-java-5.1.7-bin.jar-d build/test test/userview/*.java编译test/userview/下代码到build/test下,注意这里附加了Junit、sqlserver和mysql的jar包。

      下面使用Ant脚本自动化上述构建过程:新建build.xml文件,输入脚本代码:

<?xml version="1.0" encoding="UTF-8"?><project name="userview" default="compile"basedir=".">         <propertyname="build.dir" value="build"></property>         <propertyname="build.prod.dir"value="${build.dir}/prod"></property>         <propertyname="build.test.dir"value="${build.dir}/test"></property>         <propertyname="doc.dir" value="doc"></property>         <propertyname="index.dir" value="index"></property>         <propertyname="src.dir" value="src"></property>         <propertyname="test.dir" value="test"></property>         <propertyname="vendor.lib.dir"value="vendor/lib"></property>          <pathid="project.classpath">                   <pathelementlocation="${build.prod.dir}"/>                   <pathelementlocation="${build.test.dir}"/>                   <filesetdir="${vendor.lib.dir}">                            <includename="**/*.jar" />                   </fileset>         </path>         <targetname="perpare">                   <mkdirdir="${build.prod.dir}"/>                   <mkdirdir="${build.test.dir}"/>         </target>          <targetname="compile" depends="perpare">                   <javacdestdir="${build.prod.dir}" srcdir="${src.dir}">                            <classpathrefid="project.classpath"/>                   </javac>         </target></project>

      上述代码定义了首先定义项目属性,再定义一些必须的属性,指向项目的类和代码及生成目录,然后执行编译命令,编译源代码。在项目目录下执行ant命令,可见ant进行自动编译的过程和结果:

D:\www.gongqingkui.cn\userview>antBuildfile: D:\www.gongqingkui.cn\userview\build.xml perpare: compile: BUILD SUCCESSFULTotal time: 0 seconds      下面我们编译测试代码,并运行测试,其结果为:D:\www.gongqingkui.cn\userview>ant testBuildfile: D:\www.gongqingkui.cn\userview\build.xml perpare: compile: compile-test: test:    [junit] Testsuite:userview.DBTest    [junit] Tests run: 2,Failures: 0, Errors: 0, Time elapsed: 0.01 sec    [junit] BUILD SUCCESSFULTotal time: 1 second

      通过Ant脚本的持续构建,可以发现以往不可能发现的累积错误。

      Ant的替代产品是maven,更高层次地封装了类似于Ant的操作。Groovy脚本用于从java代码中调用Ant脚本任务。可以书写更复杂的构建任务,但是当前ant脚本功能和插件已经相当完备,在自动化系列中,ant已经可以完成所有任务。

      总结:我们从建立项目目录开始,手动键入javac编译命令,使用ant脚本自动化javac和目录的所有操作,同时编译和自动构建junit测试。下一篇文章将会描述定是构建的方法。

参考

1.      使用Ant和批处理备份数据

2.      JUnit下的测试和suite

3.      Ant结构化程序设计和WEB程序发布

4.      Ant的主要任务的语法

5.      Ant脚本的详细配置

6.      Subversion综述

 

原创粉丝点击