<?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="SKIPeclipse: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>
