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