<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->

<!-- $Rev: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $ -->

<project name="MyProject" default="dist" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">

  <!-- ===============================================================

  HOW TO RUN

    Download http://archive.apache.org/dist/maven/binaries/maven-ant-tasks-2.0.9.jar
    Then execute ant as follows:

    ant -lib maven-ant-tasks-2.0.9.jar

  NOTE

    You do NOT need maven-ant-tasks-2.0.9.jar to use OpenEJB for embedded EJB
    testing with Ant.  It is simply used in this example to make the build.xml
    a bit simpler.  As long as OpenEJB and it's required libraries are in the
    <junit> classpath, the tests will run with OpenEJB embedded.

  ================================================================= -->

  <artifact:remoteRepository id="apache.snapshot.repository" url="http://repository.apache.org/snapshots/"/>
  <artifact:remoteRepository id="m2.repository" url="http://repo1.maven.org/maven2/"/>

  <!-- Build Classpath -->
  <artifact:dependencies pathId="classpath.main">
    <dependency groupId="org.apache.openejb" artifactId="javaee-api-embedded" version="6.0-3"/>
  </artifact:dependencies>

  <!-- Test Build Classpath -->
  <artifact:dependencies pathId="classpath.test.build">
    <dependency groupId="junit" artifactId="junit" version="4.3.1"/>
    <dependency groupId="org.apache.openejb" artifactId="openejb-api" version="4.0.0-beta-1"/>
  </artifact:dependencies>

  <!-- Test Run Classpath -->
  <artifact:dependencies pathId="classpath.test.run">
    <remoteRepository refid="apache.snapshot.repository"/>
    <remoteRepository refid="m2.repository"/>

    <dependency groupId="org.apache.openejb" artifactId="openejb-core" version="4.0.0-beta-1"/>
    <dependency groupId="junit" artifactId="junit" version="4.3.1"/>
  </artifact:dependencies>

  <!-- Properties -->

  <property name="src.main.java" location="src/main/java"/>
  <property name="src.main.resources" location="src/main/resources"/>
  <property name="src.test.java" location="src/test/java"/>
  <property name="build.main" location="target/classes"/>
  <property name="build.test" location="target/test-classes"/>
  <property name="test.reports" location="target/test-reports"/>
  <property name="dist" location="target"/>


  <target name="init">
    <mkdir dir="${build.main}"/>
    <mkdir dir="${build.test}"/>
    <mkdir dir="${test.reports}"/>
  </target>

  <target name="compile" depends="init">

    <javac srcdir="${src.main.java}" destdir="${build.main}">
      <classpath refid="classpath.main"/>
    </javac>
    <copy todir="${build.main}">
      <fileset dir="${src.main.resources}"/>
    </copy>

    <javac srcdir="${src.test.java}" destdir="${build.test}">
      <classpath location="${build.main}"/>
      <classpath refid="classpath.main"/>
      <classpath refid="classpath.test.build"/>
    </javac>
  </target>

  <target name="test" depends="compile">
    <junit fork="yes" printsummary="yes">
      <classpath location="${build.main}"/>
      <classpath location="${build.test}"/>
      <classpath refid="classpath.main"/>
      <classpath refid="classpath.test.build"/>
      <classpath refid="classpath.test.run"/>

      <formatter type="plain"/>

      <batchtest fork="yes" todir="${test.reports}">
        <fileset dir="${src.test.java}">
          <include name="**/*Test.java"/>
        </fileset>
      </batchtest>
    </junit>
  </target>

  <target name="dist" depends="test">
    <jar jarfile="${dist}/myproject-1.0.jar" basedir="${build.main}"/>
  </target>

</project>
