<!--
   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.
-->
<ivysettings>
  <credentials host="repository.apache.org" realm="Sonatype Nexus Repository Manager" username="${upload.user}" passwd="${upload.password}"/>
  <caches defaultCacheDir="${user.home}/.ivy2/cache"/>
  <resolvers>
    <ibiblio name="public" m2compatible="true"/>
    <url name="nexus">
      <artifact pattern="${upload.url}/[orgPath]/[artifact]/[revision]/[artifact]-[revision](-[classifier]).[ext]" />
    </url>
  </resolvers>
  <modules>
    <module organisation="org.apache" name="ant" resolver="nexus"/>
  </modules>
  <settings defaultResolver="public"/>
</ivysettings>
