<?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.
-->
<project default="java:jar" xmlns:j="jelly:core" xmlns:ant="jelly:ant"
	xmlns:deploy="deploy" xmlns:u="jelly:util" xmlns:maven="jelly:maven">

  <preGoal name="test:test">
    <!-- Work area for unit tests -->
    <mkdir dir="target/test-sandbox/logs"/>
    <copy todir="target/test-classes">
        <fileset dir="src/test-conf"/>
    </copy>
  </preGoal>

  <preGoal name="test:single">
    <!-- Work area for unit tests -->
    <mkdir dir="target/test-sandbox/logs"/>
    <copy todir="target/test-classes">
        <fileset dir="src/test-conf"/>
    </copy>
  </preGoal>

  <postGoal name="java:compile" >
      <attainGoal name="rmic"/>
  </postGoal>


  <goal name="rmic" xmlns:j="jelly:core" xmlns:u="jelly:util">
    <rmic base="${maven.build.dest}" classname="org.apache.jcs.auxiliary.remote.RemoteCacheListener">
      <classpath>
        <path refid="maven.dependency.classpath"/>
      </classpath>
    </rmic>

    <rmic base="${maven.build.dest}" classname="org.apache.jcs.auxiliary.remote.server.RemoteCacheServer">
      <classpath>
        <path refid="maven.dependency.classpath"/>
      </classpath>
    </rmic>
  </goal>

  <goal name="copyjars">
    <j:forEach var="lib" items="${pom.artifacts}">
      <ant:copy todir="${basedir}/jars" file="${lib.path}"/>
    </j:forEach>
  </goal>

  <postGoal name="site">
    <attainGoal name="pdf"/>
  </postGoal>

  <!-- The eclipse goal runs .project and .classpath generation -->
  <!-- I want to prevent the .project file genreation, so -->
  <!-- the ant external tool builder will not get wiped out. -->
  <goal name="eclipse:generate-project">
    <!-- do nothing -->
    <ant:echo>Not generating the .project file.</ant:echo>
  </goal>

  <!-- ================================================================== -->
  <!-- D I S T : B U I L D _ B I N   P R E   G O A L                      -->
  <!-- ================================================================== -->
  <!-- copies NOTICE, LICENSE.txt                                         -->
  <!-- ${maven.dist.bin.assembly.dir} to include them in the binary dists -->
  <!-- ================================================================== -->
  <preGoal name="dist:build-bin">
    <!-- include listed dependencies -->
    <!-- j:forEach var="dep" items="${pom.dependencies}">
      <j:if test="${dep.getProperty('dist.bundle') != null &amp;&amp; dep.getProperty('dist.bundle').equalsIgnoreCase('true')}">
        <copy todir="${maven.dist.bin.assembly.dir}/lib"
              file="${maven.repo.local}/${dep.getArtifactDirectory()}/jars/${dep.getArtifact()}"/>
      </j:if>
    </j:forEach -->

    <copy todir="${maven.dist.bin.assembly.dir}" failonerror="false">
      <fileset dir="${basedir}">
        <include name="pom.xml"/>
        <include name="project.xml"/>
        <include name="project.properties"/>
        <include name="NOTICE"/>
        <include name="LICENSE.txt"/>
        <include name="LICENSE.xerox"/>
      </fileset>
    </copy>
  </preGoal>

  <!-- ================================================================== -->
  <!-- D I S T : B U I L D _ S R C   P R E   G O A L                      -->
  <!-- ================================================================== -->
  <preGoal name="dist:build-src">
    <copy todir="${maven.dist.src.assembly.dir}">
      <fileset dir="${basedir}">
        <include name="pom.xml"/>
        <include name="project.xml"/>
        <include name="project.properties"/>
        <include name="NOTICE"/>
        <include name="LICENSE.txt"/>
        <include name="LICENSE.xerox"/>
      </fileset>
    </copy>
  </preGoal>

</project>
