<?xml version="1.0" encoding="UTF-8"?>
<!--

   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.

-->
<ivy-module version="2.0">
  <info organisation="org.apache.ant"
        module="${artifact.name}"
        revision="${artifact.version}"
        publication="${artifact.publication.datetime}">
    <license name="Apache Software License 2.0"
             url="http://www.apache.org/licenses/LICENSE-2.0"/>
    <ivyauthor name="Apache Ant Development Team"
               url="http://ant.apache.org/"/>
    <description homepage="http://ant.apache.org/antlibs/antunit/">
      This library contains tasks that enables Ant task developers to test
      their tasks with Ant and without JUnit.  It contains a few assertion
      tasks and an antunit task that runs build files instead of test
      classes and is modelled after the JUnit task.
    </description>
  </info>
  <configurations>
		<conf name="default" description="full antlib with all dependencies"/>
        <conf name="provided" description="Ant must be present at runtime"/>
		<conf name="test" description="dependencies used for JUnit tests of the antlib" transitive="false" visibility="private"/>
  </configurations>
  <publications xmlns:e="urn:ant.apache.org:ivy-extras">
    <artifact name="${artifact.name}" type="pom" ext="pom"/>
    <artifact name="${artifact.name}" type="pom.asc" ext="pom.asc"/>
    <artifact name="${artifact.name}" type="jar" ext="jar"/>
    <artifact name="${artifact.name}" type="jar.asc" ext="jar.asc"/>
    <artifact name="${artifact.name}" type="source" ext="jar"
              e:classifier="sources"/>
    <artifact name="${artifact.name}" type="source.asc" ext="jar.asc"
              e:classifier="sources"/>
    <artifact name="${artifact.name}" type="javadoc" ext="jar"
              e:classifier="javadoc"/>
    <artifact name="${artifact.name}" type="javadoc.asc" ext="jar.asc"
              e:classifier="javadoc"/>
    <artifact name="${artifact.name}" type="ivy" ext="xml"
              e:classifier="ivy"/>
    <artifact name="${artifact.name}" type="ivy.asc" ext="xml.asc"
              e:classifier="ivy"/>
  </publications>
  <dependencies>
    <dependency org="junit" name="junit" rev="4.12" conf="default"/>
    <dependency org="org.apache.ant" name="ant" rev="1.8.1" conf="provided->default"/>
    <dependency org="org.apache.ant" name="ant-testutil" rev="1.8.1" conf="test->default"/>
  </dependencies>
</ivy-module>
