<?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}">
    <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/s3/">
      Library providing Resource and ResourceCollection implementations
      for Amazon Simple Storage Service (S3) objects.
    </description>
  </info>
  <configurations defaultconfmapping="*->default">
    <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 tests of the antlib" 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 defaultconfmapping="*->default">
    <dependency org="software.amazon.awssdk" name="s3" rev="${aws.sdk.version}" conf="default">
      <exclude org="software.amazon.awssdk" name="apache-client" />
    </dependency>
    <dependency org="software.amazon.awssdk" name="url-connection-client" rev="${aws.sdk.version}" conf="default" />
    <dependency org="org.apache.commons" name="commons-lang3" rev="3.12.0" conf="default" />
    <dependency org="org.apache.ant" name="ant" rev="1.10.12" conf="provided" />
    <dependency org="junit" name="junit" rev="4.13" conf="test" />
    <dependency org="com.adobe.testing" name="s3mock" rev="2.4.7" conf="test" />
    <dependency org="jakarta.servlet.jsp" name="jakarta.servlet.jsp-api" rev="2.3.6" conf="test" />
    <dependency org="org.apache.groovy" name="groovy-ant" rev="4.0.0" transitive="false" conf="test" />
    <dependency org="org.apache.groovy" name="groovy-jsr223" rev="4.0.0" conf="test" />
  </dependencies>
</ivy-module>
