Erik Itter wrote:
> perhaps someone could mail an example build file for an EJB
> project? - think i am missing something
I've removed most of the totally-project-specific targets to make it
easier to follow. If you have any questions feel free to ask. There are
a few hacks in there, but nothing too crazy. :)
I use the <if> task too, but only in one place IIRC that you could
easily remove if you don't have ant-contrib.
Peace,
David Harkness
Sr. Software Engineer
Sony Pictures Digital Networks
(310) 482-4756
<!-- ===========================================================================
I D E N T I T Y S E R V I C E B U I L D F I L E
Build / Runtime Dependencies:
CDP BL AI EJB Notes
cdpUtilities.jar x x x
utility
log4j.jar x x x
J2EE
j2ee131min.jar x Build only
weblogic.jar x x Runtime/JUnit only
TaskDef Dependencies:
XDoclet
xdoclet-1.2b2.jar
xdoclet-bea-module-1.2b2.jar
xdoclet-ejb-module-1.2b2.jar
xdoclet-web-module-1.2b2.jar
xdoclet-xjavadoc-uc-1.2b2.jar
commons-collections-2.0.jar
commons-logging.jar
log4j.jar
JUnit
junit.jar Ant/lib
optional.jar Ant/lib
crimson.jar XML formatter
JUnitReport
xalan.jar Ant/lib
if
ant-contrib-0.3.jar Ant/external-lib
Id: $Id: //ddi/DDI/identity_app/build.xml#71 $
Date: $DateTime: 2003/12/11 15:59:29 $
Author: dharkness, acrow, pli, fwang, ghsui, et al
Version: 2.0 $Revision: #71 $
Copyright (c) 2003 Sony Pictures Digital Networks. All right reserved.
============================================================================ -->
<project name="identity_app" default="build" basedir=".">
<!-- Build Properties ====================================================== -->
<!-- Let developers provide default overrides -->
<property file="build.properties"/>
<!-- Compile options -->
<property name="javac.debug" value="off"/>
<property name="javac.deprecation" value="off"/>
<!-- Whether or not to compile "test" directory when building -->
<property name="javac.tests" value="off"/>
<!-- If "yes", use JARs from project dist dirs rather than shared lib/cdp* dir -->
<property name="build.local.jars" value="no"/>
<!-- Access level for generating JavaDocs (public, protected, package, private) -->
<property name="docs.access" value="protected"/>
<!-- Default logging level -->
<property name="log4j.root.level" value="INFO"/>
<!-- Project Directories =================================================== -->
<!-- Source file directories -->
<property name="src.dir" value="/src"/>
<property name="test.dir" value="/test"/>
<property name="conf.dir" value="/conf"/>
<property name="meta.dir" value="/META-INF"/>
<property name="bin.dir" value="/bin"/>
<!-- Generated source file directories -->
<property name="gen.dir" value="/gen-src"/>
<property name="gen.meta.dir" value="${gen.dir}/META-INF"/>
<!-- Output file directories (classes, distributions, docs, reports) -->
<property name="class.dir" value="/classes"/>
<property name="dist.dir" value="/dist"/>
<property name="docs.dir" value="/docs"/>
<property name="todo.dir" value="/todo"/>
<property name="test.report.dir" value="/test-reports"/>
<!-- Packaging directories -->
<property name="pkg.dir" value="/pkg"/>
<property name="pkg.conf.dir" value="${pkg.dir}/conf"/>
<property name="pkg.meta.dir" value="${pkg.dir}/META-INF"/>
<!-- Configuration parameters for unit test target -->
<property name="test.include" value="*"/>
<property name="test.exclude" value="EXCLUDE_NOTHING"/>
<property name="test.out" value="no"/>
<property name="test.format" value="xml"/>
<!-- Path References ======================================================= -->
<!-- XDoclet class path to pull in XDoclet for ejbdoclet target -->
<path id="xdoclet.class.path.id">
<pathelement location="${lib.dir}/xdoclet/commons-collections-2.0.jar"/>
<pathelement location="${lib.dir}/xdoclet/commons-logging.jar"/>
<pathelement location="${lib.dir}/xdoclet/xdoclet-1.2b2.jar"/>
<pathelement location="${lib.dir}/xdoclet/xdoclet-bea-module-1.2b2.jar"/>
<pathelement location="${lib.dir}/xdoclet/xdoclet-ejb-module-1.2b2.jar"/>
<pathelement location="${lib.dir}/xdoclet/xdoclet-web-module-1.2b2.jar"/>
<pathelement location="${lib.dir}/xdoclet/xdoclet-xdoclet-module-1.2b2.jar"/>
<pathelement location="${lib.dir}/xdoclet/xdoclet-xjavadoc-uc-1.2b2.jar"/>
<pathelement location="${lib.dir}/utility/j2ee131min.jar"/>
</path>
<!-- Class path for 3rd-party utilities -->
<path id="lib.ext.class.path">
<pathelement location="${lib.dir}/utility/j2ee131min.jar"/>
<pathelement location="${lib.dir}/utility/junit.jar"/>
<pathelement location="${log4j.jar.file}"/>
</path>
<!-- Class path for other CDP projects -->
<path id="compile.class.path.released.id">
<pathelement location="${lib.cdp.dir}/${utilities.jar.file}"/>
<path refid="lib.ext.class.path"/>
</path>
<path id="compile.class.path.local.id">
<pathelement location="${spdedev.root.dir}/${utilities.proj.dir}//classes"/>
<path refid="lib.ext.class.path"/>
</path>
<!-- Filters =============================================================== -->
<filterset id="identity_app.ejb.filter">
<filtersfile file="${identity_app.ejb.config.filterfile}"/>
</filterset>
<!-- Task Definitions ====================================================== -->
<!-- EJBDoclet task (XDoclet) -->
<taskdef name="ejbdoclet"
classname="xdoclet.modules.ejb.EjbDocletTask"
classpathref="xdoclet.class.path.id"
/>
<!-- TodoDoclet task (XDoclet) -->
<taskdef name="todo"
classname="xdoclet.modules.doc.DocumentDocletTask"
classpathref="xdoclet.class.path.id"
/>
<!-- Ant-contrib for "if" task -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties"
classpath="${ant.contrib.jar.file}"
/>
<!-- Initialization ======================================================== -->
<!-- Prepare the build environment -->
<target name="init">
<!-- Generate a timestamp -->
<tstamp>
<format property="TODAY" pattern="d-MM-yy"/>
</tstamp>
<!-- Display important messages -->
<!-- Setup location of projects this one depends on -->
<if>
<istrue value="${build.local.jars}"/>
<then>
<property name="local.or.released" value="local"/>
<property name="serviceAPI.jar" value="${service_api.dist.dir}/${serviceAPI.jar.file}"/>
<property name="utilities.jar" value="${utilities.dist.dir}/${utilities.jar.file}"/>
<property name="platform.jar" value="${platform.dist.dir}/${platform.jar.file}"/>
<property name="email.service.jar" value="${emailservice_api.dist.dir}/${email_service.jar.file}"/>
<property name="compile.class.path.id" value="compile.class.path.local.id"/>
</then>
<else>
<property name="local.or.released" value="released"/>
<property name="serviceAPI.jar" value="${lib.cdp.dir}/${serviceAPI.jar.file}"/>
<property name="utilities.jar" value="${lib.cdp.dir}/${utilities.jar.file}"/>
<property name="platform.jar" value="${lib.cdp.dir}/${platform.jar.file}"/>
<property name="email.service.jar" value="${lib.cdp.dir}/${email_service.jar.file}"/>
<property name="compile.class.path.id" value="compile.class.path.released.id"/>
</else>
</if>
<condition property="identity_app.file.suffix" value="">
<not><isset property="identity_app.file.suffix"/></not>
</condition>
<property name="identity_app.server.ear.file" value="${identity_app.file.basename}${identity_app.file.suffix}.ear"/>
<!-- Create output directories -->
<mkdir dir="${gen.dir}"/>
<mkdir dir="${gen.meta.dir}"/>
<mkdir dir="${class.dir}"/>
</target>
<!-- Prepare the packaging environment -->
<target name="init-pkg"
description="Create directories for packaging">
<!-- Create packaging directories -->
<mkdir dir="${pkg.dir}"/>
<mkdir dir="${pkg.conf.dir}"/>
<mkdir dir="${pkg.meta.dir}"/>
<!-- Create distribution directory -->
<mkdir dir="${dist.dir}"/>
</target>
<!-- Remove Output Files =================================================== -->
<!-- Remove all output directories (generated sources, classes, jars and ears) -->
<target name="clean" description="Remove all output files">
<delete dir="${gen.dir}" quiet="true"/>
<delete dir="${class.dir}" quiet="true"/>
<delete dir="${pkg.dir}" quiet="true"/>
<delete dir="${dist.dir}" quiet="true"/>
<delete dir="${docs.dir}" quiet="true"/>
<delete dir="${test.report.dir}" quiet="true"/>
</target>
<!-- Remove just the generated sources -->
<target name="clean-gen" description="Remove generated Java files">
<delete dir="${gen.dir}" quiet="true"/>
</target>
<!-- Remove just the compiled classes -->
<target name="clean-classes" description="Remove class files">
<delete dir="${class.dir}" quiet="true"/>
</target>
<!-- Remove just the packaging environment -->
<target name="clean-pkg" description="Remove packaging directories">
<delete dir="${pkg.dir}" quiet="true"/>
</target>
<!-- Generate EJB Interfaces and Descriptors =============================== -->
<!-- Generate entity bean facade session beans -->
<target name="gen-facades"
depends="init"
description="Generate EJB interfaces, homes and descriptors">
<ejbdoclet destdir="${gen.dir}"
excludedtags="@author,@todo"
addedtags="@xdoclet-generated at ${TODAY}"
ejbspec="2.0"
>
<!-- Don't be tempted to exclude BaseEJB -->
<fileset dir="${src.dir}">
<include name="dd/ejb/entity/**/*EJB.java"/>
</fileset>
<entityfacade/>
</ejbdoclet>
</target>
<!-- Generate EJB interfaces, homes and descriptors -->
<target name="ejbdoclet"
depends="init"
description="Generate EJB interfaces, homes and descriptors">
<ejbdoclet destdir="${gen.dir}"
excludedtags="@author,@todo"
addedtags="@xdoclet-generated at ${TODAY}"
ejbspec="2.0"
>
<!-- Don't be tempted to exclude BaseEJB -->
<fileset dir="${src.dir}">
<include name="dd/ejb/**/*EJB.java"/>
</fileset>
<remoteinterface pattern="{0}"/>
<localinterface pattern="{0}Local"/>
<homeinterface pattern="{0}Home"/>
<localhomeinterface pattern="{0}LocalHome"/>
<utilobject cachehomes="true" kind="physical"/>
<deploymentdescriptor destdir="${gen.meta.dir}" validateXML="true"/>
<weblogic version="7.0"
destdir="${gen.meta.dir}"
validateXML="true"
datasource="@identity_app.db.datasource@"
persistence="weblogic"
/>
</ejbdoclet>
</target>
<!-- Compile Java Source Code ============================================== -->
<!-- Compile Java source files -->
<target name="build"
depends="ejbdoclet"
description="Compile Java files into classes directory">
<!-- Determine whether or not to compile test directory -->
<if>
<istrue value="${javac.tests}"/>
<then>
<property name="conditional.test.dir" value="${test.dir}"/>
</then>
<else>
<property name="conditional.test.dir" value=""/>
</else>
</if>
<!-- Display status of compilation flags -->
<echo message="Compile Test Directory: ${javac.tests}"/>
<echo message="Include debugging info: ${javac.debug}"/>
<echo message="Display deprecation warnings: ${javac.deprecation}"/>
<echo message="Local or released CDP JARs: ${local.or.released}"/>
<!-- Compile -->
<javac destdir="${class.dir}"
classpathref="${compile.class.path.id}"
deprecation="${javac.deprecation}"
debug="${javac.debug}" debuglevel="lines,vars,source"
>
<src path="${src.dir}"/>
<src path="${gen.dir}"/>
<src path="${conditional.test.dir}"/>
</javac>
</target>
<!-- Compile only test-related Java source files -->
<target name="build-tests"
depends="init"
description="Compile testing Java files into classes directory">
<!-- Display status of compilation flags -->
<echo message="Include debugging info: ${javac.debug}"/>
<echo message="Display deprecation warnings: ${javac.deprecation}"/>
<echo message="Local or released CDP JARs: ${local.or.released}"/>
<!-- Compile -->
<javac destdir="${class.dir}"
classpathref="${compile.class.path.id}"
deprecation="${javac.deprecation}"
debug="${javac.debug}" debuglevel="lines,vars,source"
>
<src path="${test.dir}"/>
</javac>
</target>
<!-- Configure XML and Properties Files ==================================== -->
<!-- Configure Log4j EJB-Layer Properties -->
<target name="config-logging"
depends="init-pkg"
description="Filter-copy log4j.properties file to pkg/conf directory">
<copy todir="${pkg.conf.dir}" overwrite="true"
file="${conf.dir}/log4j.properties">
<filterset>
<filter token="LOG4J_ROOT_LOGGER" value="${identity_app.log4j.root.level}"/>
</filterset>
</copy>
</target>
<!-- Configure EJB-Layer Deployment Properties -->
<target name="config-beans"
depends="init-pkg"
description="Filter-copy deployment files to pkg/conf directory">
<!-- Fail if the descriptors haven't been generated instead of depending on the "package" target -->
<available property="identity_app.gen-meta.present"
file="${gen.meta.dir}"/>
<fail unless="identity_app.gen-meta.present"
message="You must generate the EJB deployment descriptors before packaging"/>
<!-- Configure the EJB deployment files that were generated (weblogic-ejb-jar, etc.) -->
<copy todir="${pkg.meta.dir}" overwrite="true">
<fileset dir="${gen.meta.dir}">
<include name="**/*.xml"/>
</fileset>
<filterset refid="identity_app.ejb.filter"/>
</copy>
</target>
<!-- Configure EJB-Layer Runtime Properties -->
<target name="config-app"
depends="init-pkg"
description="Filter-copy properties files to pkg/conf directory">
<copy todir="${pkg.conf.dir}" overwrite="true">
<fileset dir="${conf.dir}">
<include name="application.properties"/>
<include name="identity-validation-rules.xml"/>
</fileset>
<filterset refid="identity_app.ejb.filter"/>
</copy>
</target>
<!-- Configure All EJB-Layer Properties -->
<target name="config-server"
depends="config-logging, config-beans, config-app"
description="Filter-copy all EJB-layer-related properties files">
<!-- All done through depends targets -->
</target>
<!-- Configure All Client-Layer Properties for Local Running (Tests) -->
<target name="config-run"
depends="init"
description="Configure all client-layer properties for local running">
<!-- Logging properties -->
<copy todir="${class.dir}" overwrite="true"
file="${conf.dir}/log4j.properties">
<filterset>
<filter token="LOG4J_ROOT_LOGGER" value="${identity_app.log4j.root.level}"/>
</filterset>
</copy>
<!-- Application properties -->
<copy todir="${class.dir}" overwrite="true">
<fileset dir="${conf.dir}">
<include name="application.properties"/>
<include name="identity-validation-rules.xml"/>
</fileset>
<filterset refid="identity_app.ejb.filter"/>
</copy>
</target>
<!-- Package JARs and EARs ================================================= -->
<!-- Create EJB-layer JAR and EAR from classes and deployment descriptors -->
<target name="package-server"
depends="build, config-server"
description="Create JAR and EAR for use in EJB layer">
<!-- Remove old JAR/EAR -->
<delete file="${dist.dir}/${identity_app.server.jar.file}" quiet="true"/>
<delete file="${dist.dir}/${identity_app.server.ear.file}" quiet="true"/>
<!-- Package it all up into a JAR -->
<jar jarfile="${dist.dir}/${identity_app.server.jar.file}"
manifest="${meta.dir}/MANIFEST.MF"
>
<!-- Compiled classes -->
<fileset dir="${class.dir}">
<include name="**/*.class"/>
</fileset>
<!-- EJB deployment descriptors -->
<zipfileset dir="${pkg.meta.dir}" prefix="META-INF"/>
<!-- Configuration files -->
<fileset dir="${pkg.conf.dir}">
<include name="log4j.properties"/>
<include name="application.properties"/>
<include name="identity-validation-rules.xml"/>
</fileset>
</jar>
<!-- Package it all up into an EAR -->
<echo message="Local or released CDP JARs: ${local.or.released}"/>
<ear destfile="${dist.dir}/${identity_app.server.ear.file}"
appxml="${meta.dir}/application.xml"
>
<!-- Include WebLogic-specific application deployment file -->
<metainf file="${meta.dir}/weblogic-application.xml"/>
<!-- Identity Service JAR -->
<fileset file="${dist.dir}/${identity_app.server.jar.file}"/>
<!-- CDP project dependencies -->
<fileset file="${serviceAPI.jar}"/>
<fileset file="${utilities.jar}"/>
<fileset file="${platform.jar}"/>
<fileset file="${email.service.jar}"/>
<!-- 3rd-Party utility dependencies -->
<fileset file="${log4j.jar.file}"/>
<fileset file="${lib.dir}/${beanutils.jar.file}"/>
<fileset file="${lib.dir}/${collections.jar.file}"/>
<fileset file="${lib.dir}/${digester.jar.file}"/>
<fileset file="${lib.dir}/${logging.jar.file}"/>
<fileset file="${lib.dir}/${validator.jar.file}"/>
</ear>
</target>
<!-- Create JAR for use in client layer -->
<target name="package-client"
depends="build, init-pkg"
description="Create JAR for use in client layer">
<!-- Remove old JAR -->
<delete file="${dist.dir}/${identity_app.client.jar.file}" quiet="true"/>
<!-- Package it all up into a JAR -->
<jar jarfile="${dist.dir}/${identity_app.client.jar.file}"
manifest="${meta.dir}/MANIFEST.MF"
>
<!-- Compiled classes -->
<fileset dir="${class.dir}">
<include name="**/*.class"/>
</fileset>
<!-- Validation rule files -->
<fileset dir="${conf.dir}">
<include name="identity-validation-rules.xml"/>
</fileset>
</jar>
</target>
<!-- Packages both the client JAR and the server EAR -->
<target name="package"
depends="package-client, package-server"
description="Package client JAR and server EAR">
<!-- All done through depends targets -->
</target>
<!-- Deploy to WebLogic ==================================================== -->
<!-- Undeploy by removing EAR from ddDomain -->
<target name="undeploy"
depends="init"
description="Remove the deployed EAR from WebLogic">
<!-- Delete the EAR and ignore if not present -->
<delete file="${deploy.dir}/${identity_app.server.ear.file}" quiet="true"/>
</target>
<!-- Deploy by copying EAR to ddDomain -->
<target name="deploy"
depends="undeploy"
description="Deploy the packaged EAR to WebLogic">
<!-- Fail if the EAR hasn't been packaged instead of depending on the "package" target -->
<available property="identity.ear.present"
file="${dist.dir}/${identity_app.server.ear.file}"/>
<fail unless="identity.ear.present"
message="You must package the EAR before deploying"/>
<copy todir="${deploy.dir}" file="${dist.dir}/${identity_app.server.ear.file}"/>
</target>
</project>