<?xml version="1.0"?>
<!--
   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 xmlns:current="ant:current">
    <typedef name="settings" classname="org.apache.ivy.ant.IvyAntSettings"/>
    <typedef name="resources" classname="org.apache.ivy.ant.IvyResources" onerror="report"/>
	<taskdef name="configure" classname="org.apache.ivy.ant.IvyConfigure"/>
	<taskdef name="resolve" classname="org.apache.ivy.ant.IvyResolve"/>
	<taskdef name="retrieve" classname="org.apache.ivy.ant.IvyRetrieve"/>
	<taskdef name="deliver" classname="org.apache.ivy.ant.IvyDeliver"/>
	<taskdef name="publish" classname="org.apache.ivy.ant.IvyPublish"/>
	<taskdef name="extract" classname="org.apache.ivy.ant.IvyExtractFromSources"/>
	<taskdef name="cachepath" classname="org.apache.ivy.ant.IvyCachePath"/>
	<taskdef name="cachefileset" classname="org.apache.ivy.ant.IvyCacheFileset"/>
	<taskdef name="report" classname="org.apache.ivy.ant.IvyReport"/>
	<taskdef name="repreport" classname="org.apache.ivy.ant.IvyRepositoryReport"/>
	<taskdef name="var" classname="org.apache.ivy.ant.IvyVar"/>
	<taskdef name="check" classname="org.apache.ivy.ant.IvyCheck"/>
	<taskdef name="artifactproperty" classname="org.apache.ivy.ant.IvyArtifactProperty"/>
	<taskdef name="buildlist" classname="org.apache.ivy.ant.IvyBuildList"/>
	<taskdef name="install" classname="org.apache.ivy.ant.IvyInstall"/>
	<taskdef name="convertpom" classname="org.apache.ivy.ant.IvyConvertPom"/>
	<taskdef name="makepom" classname="org.apache.ivy.ant.IvyMakePom"/>
	<taskdef name="artifactreport" classname="org.apache.ivy.ant.IvyArtifactReport"/>
	<taskdef name="info" classname="org.apache.ivy.ant.IvyInfo"/>
	<taskdef name="addpath" classname="org.apache.ivy.ant.AddPathTask"/>
	<taskdef name="listmodules" classname="org.apache.ivy.ant.IvyListModules"/>
	<taskdef name="findrevision" classname="org.apache.ivy.ant.IvyFindRevision"/>
	<taskdef name="buildnumber" classname="org.apache.ivy.ant.IvyBuildNumber"/>
	<taskdef name="cleancache" classname="org.apache.ivy.ant.IvyCleanCache"/>
    <taskdef name="buildobr" classname="org.apache.ivy.ant.BuildOBRTask" />
    <taskdef name="convertmanifest" classname="org.apache.ivy.ant.ConvertManifestTask" />
    <taskdef name="fixdeps" classname="org.apache.ivy.ant.FixDepsTask" />
    <taskdef name="dependencytree" classname="org.apache.ivy.ant.IvyDependencyTree"/>
    <taskdef name="checkdepsupdate" classname="org.apache.ivy.ant.IvyDependencyUpdateChecker"/>
    <typedef name="workspaceresolver" classname="org.apache.ivy.ant.AntWorkspaceResolver" />
</antlib>
