[ Team LiB ] |
3.20 Bootstrapping a Build3.20.1 ProblemYou want to use Ant to kick off a nightly build process. 3.20.2 SolutionCreate a "bootstrap" buildfile that checks out a clean copy of all sources from revision control. Then, pass off control to the main buildfile that was one of the files just checked out. 3.20.3 DiscussionMany projects set up a build server that performs complete, clean builds at scheduled times. A clean build ensures that every file in the system compiles. If you do not start with a clean slate, you may end up with a successful build just because some obsolete source or class files are lingering in your directory structure. A clean build consists of the following high-level steps:
Example 3-10 shows the complete Ant buildfile for performing a bootstrap build. The buildfile uses the cvs task as shown in Recipe 3.19 to checkout or update the entire cookbook directory. Once the latest files are obtained, we invoke Ant on cookbook/build.xml to perform the clean build. Example 3-10. Bootstrap buildfile<?xml version="1.0"?> <project name="Java XP Cookbook" default="build" basedir="."> <target name="prepare"> <!-- convert the CVS repository directory into a fully-qualitied Windows directory --> <pathconvert targetos="windows" property="cvsrepository.path"> <path> <pathelement location="repository"/> </path> </pathconvert> <!-- store the CVS root in a property --> <property name="cvsroot" value=":local:${cvsrepository.path}"/> <!-- determine if the files have been checked out --> <available file="cookbook" type="dir" property="already.checked.out"/> </target> <target name="clean" description="Remove the entire cookbook directory."> <delete dir="cookbook"/> </target> <target name="cvscheckout" depends="prepare" unless="already.checked.out"> <cvs cvsroot="${cvsroot}" package="cookbook"/> </target> <target name="cvsupdate" depends="prepare" if="already.checked.out"> <cvs command="update -dP" cvsroot="${cvsroot}" dest="cookbook"/> </target> <target name="build" depends="cvscheckout,cvsupdate"> <ant dir="cookbook" target="all" inheritAll="false"/> </target> </project> 3.20.4 See AlsoWindows users can use "Scheduled Tasks" under the Control Panel to schedule builds for certain times of day. The CruiseControl tool is designed to help with continuous integration, and is available at http://cruisecontrol.sourceforge.net. |
[ Team LiB ] |