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>

Reply via email to