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>