<!--
  Copyright 2002,2004 The Apache Software Foundation.
  
  Licensed 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">

  <!-- define the classpath used to run examples -->
  <goal name="create-classpath" prereqs="java:compile,test:compile">
        <path id="test.classpath">
            <pathelement path="${maven.build.dest}"/>
            <pathelement path="target/classes"/>
            <pathelement path="target/test-classes"/>
            <path refid="maven.dependency.classpath"/>
        </path>
  </goal>
  
  <!-- some examples -->
  <goal name="demo:bean" prereqs="create-classpath"
        description="Runs the example of binding beans to tags">

    <java classname="org.apache.commons.jelly.Jelly" fork="yes">
      <classpath refid="test.classpath"/>
      <arg value="src/test/org/apache/commons/jelly/tags/define/beanSample.jelly"/>
    </java>
  </goal>

  <goal name="demo:jellybean" prereqs="create-classpath"
        description="Runs the example of binding jelly beans to tags">

    <java classname="org.apache.commons.jelly.Jelly" fork="yes">
      <classpath refid="test.classpath"/>
      <arg value="src/test/org/apache/commons/jelly/tags/define/jellyBeanSample.jelly"/>
    </java>
  </goal>


</project>
