Java/Ant/CVS
Check out from CVS
<?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>
Check out source code from cvs
<?xml version="1.0"?>
<project name="Example Application Build" default="build-both" basedir=".">
<property file="build.properties"/>
<!-- CVSROOT for the JSTL -->
<property name="cvsroot" value=":pserver:anoncvs@cvs.apache.org:/home/cvspublic" />
<!-- CVSROOT for the MySQL connector -->
<property name="mysql.cvsroot" value=":pserver:anonymous@cvs.sourceforge.net:/cvsroot/mmmysql" />
<!-- The master build classpath -->
<path id="build.classpath">
<pathelement location="${servlet24.jar}"/>
<pathelement location="${jsp20.jar}"/>
<pathelement location="${mysql.jar}"/>
<pathelement path="${appName.jar}"/>
</path>
<!-- Initialization target -->
<!-- Create the working directories -->
<target name="dir" description="Create the working directories">
<echo message="Creating the working directories"/>
<mkdir dir="${build.stand-alone.root}"/>
<mkdir dir="${build.web.classes}"/>
<mkdir dir="${dist}"/>
<mkdir dir="${lib}"/>
</target>
<!-- CVS and build tasks for the JSTL and MySQL connector -->
<!-- Update or check out required sources from CVS for the JSTL -->
<target name="checkout-jstl" depends="dir"
description="Update or check out required sources
from CVS for the JSTL">
<echo message="Checking out the required JSTL sources from CVS"/>
<cvs cvsroot="${cvsroot}" quiet="true"
command="checkout -P ${jstl.build}"
dest="${build}" compression="true" />
</target>
<!-- Update or check out required sources from CVS for the MySQL connector -->
<target name="checkout-mysql-connector" depends="dir"
description="Update or check out required sources
from CVS for the MySQL connector">
<echo message="Checking out the required sources from CVS for the MySQL connector" />
<cvs cvsroot="${mysql.cvsroot}" quiet="true"
command="checkout" package="${mysql.build}"
dest="${build}" compression="true" />
</target>
<!-- Build the JSTL from source -->
<target name="build-jstl" depends="checkout-jstl"
description="Build the JSTL from source">
<echo message="Building the JSTL from source"/>
<ant antfile="build.xml" dir="${build}/${jstl.build}"/>
<copy todir="${lib}">
<fileset dir="${build}/${jstl.build}/${build}/lib">
<include name="*.jar"/>
</fileset>
</copy>
</target>
<!-- Build the MySQL connector from source -->
<target name="build-mysql-connector" depends="checkout-mysql-connector"
description="Build the MySQL connector from source">
<echo message="Building the MySQL connector from source"/>
<!-- The MySQL connector file needs this directory to exist -->
<!-- Therefore we need to create it -->
<mkdir dir="${build}/dist-mysql-jdbc"/>
<ant antfile="build.xml" dir="${build}/${mysql.build}"/>
<copy tofile="${mysql.jar}">
<fileset dir="${build}/build-mysql-jdbc">
<include name="mysql-connector*/*.jar"/>
</fileset>
</copy>
</target>
<!-- Compile the stand-alone application -->
<target name="compile-stand-alone" depends="dir"
description="Compile stand-alone application">
<echo message="Compiling the stand-alone application"/>
<javac srcdir="${src.shared.java}" destdir="${build.stand-alone.root}"/>
<javac srcdir="${src.stand-alone.java}"
destdir="${build.stand-alone.root}"/>
</target>
<!--
<target name="stand-alone-complete"
description="Compile stand-alone application,
using CVS version of the MySQL connector">
<echo message="Compiling stand-alone application, using CVS versions of the MySQL connector"/>
<antcall target="build-mysql-connector"/>
<antcall target="package-stand-alone"/>
</target>
<target name="stand-alone-complete"
depends="build-mysql-connector, package-stand-alone"
description="Compile stand-alone application,
using CVS version of the MySQL connector">
<echo message="Compiling stand-alone application, using CVS versions of the MySQL connector"/>
</target>
-->
<target name="stand-alone-complete"
depends="build-mysql-connector, package-stand-alone"
description="Compile stand-alone application,
using CVS version of the MySQL connector">
<echo message="Compiling stand-alone application, using CVS versions of the MySQL connector"/>
</target>
<!-- Package the stand-alone application -->
<target name="package-stand-alone" depends="compile-stand-alone"
description="Package the stand-alone application">
<echo message="Creating the stand-alone JAR file"/>
<copy file="${database.properties}" todir="${build.stand-alone.root}"/>
<jar destfile="${appName.jar}" basedir="${build.stand-alone.root}"/>
</target>
<!-- Compile the web application -->
<target name="compile-web" depends="dir" description="Compile web application">
<echo message="Compiling the web application"/>
<javac destdir="${build.web.classes}">
<src path="${src.shared.java}"/>
</javac>
<javac srcdir="${src.web.java}" destdir="${build.web.classes}">
<classpath refid="build.classpath"/>
</javac>
</target>
<!--
<target name="web-complete"
description="Compile web application,
using CVS versions of the MySQL connector and the JSTL">
<echo message="Compiling web application, using CVS versions of the MySQL connector and the JSTL"/>
<antcall target="build-mysql-connector"/>
<antcall target="build-jstl"/>
<antcall target="package-web"/>
</target>
<target name="web-complete"
depends="build-mysql-connector, build-jstl, package-web"
description="Compile web application,
using CVS versions of the MySQL connector and the JSTL">
<echo message="Compiled web application, using CVS versions of the MySQL connector and the JSTL"/>
</target>
-->
<target name="web-complete"
depends="build-mysql-connector, build-jstl, package-web"
description="Compile web application,
using CVS versions of the MySQL connector and the JSTL">
<echo message="Compiling web application, using CVS versions of the MySQL connector and the JSTL"/>
</target>
<!-- Copy the web pages and configuration files -->
<target name="copy-web" depends="compile-web" description="Copy the web files">
<echo message="Copying the web pages and configuration files"/>
<copy todir="${build.web.root}">
<fileset dir="${src.web.pages}"/>
</copy>
<!-- Copy the tags -->
<copy todir="${build.web.tags}">
<fileset dir="${src.web.tags}"/>
</copy>
<copy todir="${build.web.web-inf}">
<fileset dir="${src.web.conf}">
<include name="*.tld"/>
</fileset>
</copy>
<!-- Copy the JAR files -->
<copy todir="${build.web.lib}">
<fileset dir="${lib}"/>
</copy>
<!-- Copy the properties file -->
<copy file="${database.properties}" todir="${build.web.classes}"/>
<!-- No need to copy web.xml, as the WAR task does this for us -->
</target>
<!-- Build the WAR file -->
<target name="package-web" depends="copy-web" description="Build the WAR">
<echo message="Building the WAR file"/>
<war destfile="${appName.war}" basedir="${build.web.root}"
webxml="${src.web.conf}/web.xml"/>
</target>
<!-- Targets that work with both applications -->
<!--
<target name="build-both"
description="Compile both applications,
without CVS versions of the MySQL connector and the JSTL">
<echo message="Compiling both applications, without CVS versions of the MySQL connector and the JSTL"/>
<antcall target="package-stand-alone"/>
<antcall target="package-web"/>
</target>
<target name="build-all"
description="Compile both applications,
using CVS versions of the MySQL connector and the JSTL">
<echo message="Compiling both applications, using CVS versions of the MySQL connector and the JSTL"/>
<antcall target="stand-alone-complete"/>
<antcall target="web-complete"/>
</target>
-->
<target name="build-both"
depends="package-stand-alone, package-web"
description="Compile both applications,
without CVS versions of the MySQL connector and the JSTL">
<echo message="Compiled both applications, without CVS versions of the MySQL connector and the JSTL"/>
</target>
<target name="build-all"
depends="stand-alone-complete, web-complete"
description="Compile both applications,
using CVS versions of the MySQL connector and the JSTL">
<echo message="Compiled both applications, using CVS versions of the MySQL connector and the JSTL"/>
</target>
<!-- Download the servlet JAR -->
<target name="download-servlet-jar" depends="dir"
description="Download the servlet JAR">
<echo message="Downloading the servlet JAR"/>
<get src="http://www.ibiblio.org/maven/servletapi/jars/servletapi-2.4.jar"
dest="${servlet24.jar}"
verbose="true"/>
</target>
<!-- Download the JSP JAR -->
<target name="download-jsp-jar" depends="dir"
description="Download the JSP JAR">
<echo message="Downloading the JSP JAR"/>
<get src="http://www.ibiblio.org/maven/jspapi/jars/jsp-api-2.0.jar"
dest="${jsp20.jar}"
verbose="true"/>
</target>
<target name="clean" description="Clean up the working directories">
<echo message="Cleaning up"/>
<delete dir="${build}"/>
</target>
</project>
CVS update
<?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>