编者语:在这本书中,Pragmatic Project Automation, Mike Clark 为你提供了无所不有的方法来自动化你的软件项目:用Ant来一步式构建(one-step builds),用CruiseControl 按计划时间来持续构建(scheduling continuous builds),按一下按钮就可以发布软件,轻易地安装和布署应用,通过email,RSS,你的手机,甚至是熔岩灯(lava lamps)来监控构建和程序运行。方法包含示例使初学者也很轻易实践,即使是熟手也有更多高级的主题能教她们一些新东西。在这篇文章里,他描绘了自动化你的项目能带来的好处的概要。
你即将要在明天早上交付一个用于要害性演示的软件版本。穿着西装的销售人员嘴里吹着泡炫耀你公司的新的辅助应用给一些十分重要的有钱人。正象你正在键盘上寻找感觉,你的老板却站到你的旁边提醒你这个演示可能会得到这个项目或者让项目完蛋。不要有任何压力!
一步构建和测试
在你为那些“必须有”的演示特征输入最后一行代码后,差不多都中午了。你最喜爱的IDE 显示你的代码编译通过并通过了单元测试。但是当他结合到系统的其余部分,你的代码是否能象预期的那样正常工作呢?为了弄清楚它,你更新了你本地的工作区,为了同步现在版本控制系统中的文件。然后你运行了项目的一步式构建过程:
$ ant
这个命令编译了所有的代码文件,运行了下面Ant构建文件中的配置的所有的单元测试。
清单1:
<project name="whizbang" default="test" basedir=".">
<property name="build.prod.dir" location="build/prod"/>
<property name="build.test.dir" location="build/test"/>
<property name="src.dir" location="src"/>
<property name="test.dir" location="test"/>
<property name="vendor.lib.dir" location="vendor/lib"/>
<path id="project.classpath">
<pathelement location="${build.prod.dir}" />
<pathelement location="${build.test.dir}" />
<fileset dir="${vendor.lib.dir}">
<include name="*.jar"/>
</fileset>
</path>
<target name="prepare">
<mkdir dir="${build.prod.dir}"/>
<mkdir dir="${build.test.dir}"/>
</target>
<target name="compile" depends="prepare">
<Javac srcdir="${src.dir}" destdir="${build.prod.dir}">
<classpath refid="project.classpath" />
</javac>
</target>
<target name="compile-tests" depends="compile">
<javac srcdir="${test.dir}" destdir="${build.test.dir}">
<classpath refid="project.classpath" />
</javac>
</target>
<target name="test" depends="compile-tests">
<junit haltonfailure="true">
<classpath refid="project.classpath" />
<formatter type="brief" usefile="false" />
<batchtest>
<fileset dir="${build.test.dir}"
includes="**/*Test.class" />
</batchtest>
</junit>
</target>
</project>
当你写代码时,你在你的IDE中频繁地点击方便的构建按钮来确认所有的东西都编译了。你也已经热衷于当你的JUnit测试通过后,看到一个快乐的绿色条(单元测试成功的标志),然后你使用JUnit测试运行器(JUnit test runner)整合到你的IDE中。但不是团队里的每个人都象你那样喜欢这个IDE,而且你也不想在每次有人想做一个构建时就不得不启动IDE。使用构建文件来和你的IDE分离,每个团队里的人都能一步式地持续构建和测试项目。(项目使用Maven 来创建一步式构建。)