<!--
    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.
-->
<antlib>
    <taskdef name="copy" classname="org.apache.commons.vfs.tasks.CopyTask" onerror="report"/>
    <taskdef name="delete" classname="org.apache.commons.vfs.tasks.DeleteTask" onerror="report"/>
    <taskdef name="mkdir" classname="org.apache.commons.vfs.tasks.MkdirTask" onerror="report"/>
    <taskdef name="move" classname="org.apache.commons.vfs.tasks.MoveTask" onerror="report"/>
    <taskdef name="show-file" classname="org.apache.commons.vfs.tasks.ShowFileTask" onerror="report"/>
    <taskdef name="sync" classname="org.apache.commons.vfs.tasks.SyncTask" onerror="report"/>
</antlib>