I've been meaning to post this for a while now but am just now getting
around to it.  I recently rewrite my ant buildfiles so that they:

a) Compile java source in a "single big tree"
b) Use the newer ant constructs for filesets
c) Use the <war> task
d) Eliminate all copying of files

The results are considerably cleaner (half the number of targets) and
generates no depreciation warnings.  

I figure others might find them of use.  I've attached a trivial project
("servertest") which includes a basic buildfile and shows how the files
are laid out.  I've also attached a much more complicted buildfile
("similarity"), which shows one ejb-jar, a main web-war, a test web-war,
two application clients, and a lot of rmi compiling (some using IIOP,
which requires a nightly build version of ant).

Enjoy :-)

Jeff Schnitzer
[EMAIL PROTECTED]

ServerTest.zip

<?xml version="1.0"?>

<!--
	$Id: build.xml,v 1.37 2001/02/07 11:26:43 jeff Exp $
	$Source: /usr/local/cvsroot/Similarity/build.xml,v $

	Build file for the Similarity J2EE application.
-->

<project name="similarity" default="javasrc" basedir=".">

	<property name="name" value="${ant.project.name}" />

	<property name="output.dir" value="out" />

	<property name="javasrc.dir" value="javasrc" />
	<property name="javasrc.staging.dir" value="${output.dir}/${javasrc.dir}" />

	<property name="app-ear.dir" value="components/app-ear" />
	<property name="app-ear.product" value="${output.dir}/${name}.ear" />

	<property name="ejb-jar.dir" value="components/ejb-jar" />
	<property name="ejb-jar.file" value="${name}-ejb.jar" />
	<property name="ejb-jar.product" value="${output.dir}/${ejb-jar.file}" />

	<property name="web-war.dir" value="components/web-war" />
	<property name="web-war.file" value="${name}-web.war" />
	<property name="web-war.product" value="${output.dir}/${web-war.file}" />

	<property name="test-war.dir" value="components/test-war" />
	<property name="test-war.file" value="${name}-test-web.war" />
	<property name="test-war.product" value="${output.dir}/${test-war.file}" />

	<property name="console.dir" value="components/console" />
	<property name="console.file" value="console.jar" />
	<property name="console.product" value="${output.dir}/${console.file}" />

	<property name="queen.dir" value="components/queen" />
	<property name="queen.file" value="queen.jar" />
	<property name="queen.product" value="${output.dir}/${queen.file}" />

	<property name="orion.dir" value="/java/orion" />
	<property name="lib.dir" value="lib" />

	<path id="master-classpath">
		<pathelement location="${orion.dir}/orion.jar" />
		<pathelement location="${orion.dir}/ejb.jar" />
		<pathelement location="${orion.dir}/mail.jar" />
		<pathelement location="${orion.dir}/jndi.jar" />
		<pathelement location="${orion.dir}/lib/junit.jar" />
		<pathelement location="${orion.dir}/lib/junitee.jar" />
		<fileset dir="${lib.dir}">
			<include name="**/*.jar" />
		</fileset>
	</path>

	<property name="debug" value="on" />

	<target name="clean">
		<delete dir="${output.dir}" />
	</target>

 	<target name="javasrc">
		<mkdir dir="${javasrc.staging.dir}" />
		<javac srcdir="${javasrc.dir}"
				destdir="${javasrc.staging.dir}"
				debug="${debug}">
			<classpath refid="master-classpath" />
		</javac>
	</target>

	<target name="javasrc-rmi" depends="javasrc">
		<!-- Produce JRMP stubs for Buzz -->
		<rmic base="${javasrc.staging.dir}"
				classname="com.similarity.queen.Queen"
				stubversion="1.2" />

		<!-- Produce IIOP stubs and ties for Heartbeat -->
		<rmic base="${javasrc.staging.dir}"
				classname="com.similarity.queen.HeartbeatImpl"
				iiop="yes" />

		<!-- Produce IDL for Buzz -->
		<rmic base="${javasrc.staging.dir}"
				classname="com.similarity.hive.Buzz"
				iiop="yes"
				idl="yes"
				iiopopts="-noValueMethods" />

		<!-- Produce IDL for Heartbeat -->
		<rmic base="${javasrc.staging.dir}"
				classname="com.similarity.hive.Heartbeat"
				iiop="yes"
				idl="yes"
				iiopopts="-noValueMethods" />
	</target>

	<target name="ejb-jar" depends="javasrc-rmi">
		<jar jarfile="${ejb-jar.product}">
			<fileset dir="${ejb-jar.dir}" />

			<fileset dir="${javasrc.staging.dir}">
				<include name="com/similarity/ejb/**/*.class" />
				<include name="com/similarity/hive/**/*.class" />
				<include name="com/similarity/hiveutils/**/*.class" />
				<include name="com/similarity/queen/Queen_Stub.class" />
			</fileset>
		</jar>
	</target>

	<target name="web-war" depends="javasrc-rmi">
		<war warfile="${web-war.product}" webxml="${web-war.dir}/WEB-INF/web.xml">
			<fileset dir="${web-war.dir}" excludes="WEB-INF/**" />

			<classes dir="${javasrc.staging.dir}">
				<include name="com/similarity/form/**/*.class" />
				<include name="com/similarity/servlet/**/*.class" />
			</classes>

			<lib dir="${lib.dir}">
				<include name="Acme.jar" />
				<include name="ejbtags.jar" />
				<include name="utiltags.jar" />
			</lib>
		</war>
	</target>

	<target name="test-war" depends="javasrc-rmi">
		<war warfile="${test-war.product}" webxml="${test-war.dir}/WEB-INF/web.xml">
			<fileset dir="${test-war.dir}" excludes="WEB-INF/**" />

			<classes dir="${javasrc.staging.dir}">
				<include name="com/similarity/test/**/*.class" />
				<include name="com/similarity/testutils/**/*.class" />
			</classes>

			<lib dir="${lib.dir}">
				<include name="ejbtags.jar" />
			</lib>
		</war>
	</target>

	<target name="app-ear" depends="ejb-jar, web-war, test-war, queen, console">
		<jar jarfile="${app-ear.product}">
			<fileset dir="${app-ear.dir}" />

			<fileset dir="${output.dir}">
				<include name="${ejb-jar.file}" />
				<include name="${web-war.file}" />
				<include name="${test-war.file}" />
				<include name="${queen.file}" />
				<include name="${console.file}" />
			</fileset>
		</jar>
	</target>

	<target name="console" depends="javasrc">
		<jar jarfile="${console.product}" manifest="${console.dir}/META-INF/MANIFEST.MF">
			<fileset dir="${console.dir}" excludes="META-INF/MANIFEST.MF" />

			<fileset dir="${javasrc.staging.dir}">
				<include name="com/similarity/admin/**/*.class" />
				
				<!-- These are necessary because Orion doesn't package application clients -->
				<include name="com/similarity/hive/*.class" />
				<include name="com/similarity/ejb/drone/Drone.class" />
				<include name="com/similarity/ejb/drone/DroneBusiness.class" />
				<include name="com/similarity/ejb/drone/DroneHome.class" />
				<include name="com/similarity/ejb/category/Category.class" />
				<include name="com/similarity/ejb/category/CategoryBusiness.class" />
				<include name="com/similarity/ejb/category/CategoryHome.class" />
				<include name="com/similarity/ejb/question/Question.class" />
				<include name="com/similarity/ejb/question/QuestionBusiness.class" />
				<include name="com/similarity/ejb/question/QuestionHome.class" />
			</fileset>
		</jar>
	</target>

	<target name="queen" depends="javasrc-rmi">
		<jar jarfile="${queen.product}" manifest="${queen.dir}/META-INF/MANIFEST.MF">
			<fileset dir="${queen.dir}" excludes="META-INF/MANIFEST.MF" />

			<fileset dir="${javasrc.staging.dir}">
				<include name="com/similarity/queen/**/*.class" />
				<include name="com/similarity/hive/**/*.class" />
				<include name="com/similarity/hiveutils/HiveNames.class" />
				
				<!-- These are necessary because Orion doesn't package application clients -->
				<include name="com/similarity/ejb/drone/Drone.class" />
				<include name="com/similarity/ejb/drone/DroneBusiness.class" />
				<include name="com/similarity/ejb/drone/DroneHome.class" />
			</fileset>
		</jar>
	</target>
	
	<target name="deploy" depends="app-ear">
		<copy file="${app-ear.product}"
				todir="${orion.dir}/applications" />
	</target>

</project>

Reply via email to