<?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

       https://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="https://www.apache.org/licenses/LICENSE-2.0"/>
    <ivyauthor name="Apache Ant Development Team"
               url="https://ant.apache.org/"/>
    <description homepage="https://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>
