<!--
  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="jar:jar">
  
  <goal name="demo" prereqs="jar:jar"
      description="Non-functioning demo yet.">
    <java classname="org.apache.commons.jelly.Jelly" fork="yes">
      <!-- This does not currently work due to a bug in jline - it extracts
           a DLL into %TEMP% on Windows, but both the parent and forked process
           use it -->
      <classpath>
        <path refid="maven.dependency.classpath"/>
        <pathelement location="${maven.build.dest}" />
      </classpath>
      <arg value="src/test/org/apache/commons/jelly/tags/interaction/sample.jelly"/>
    </java>
  </goal>
</project>
