<!--
   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.
-->
<ivysettings>
  <!-- This file is included by default by top-level-ivy-settings.xml,
       which loads ivy-versions.properties as Ivy variables.          -->

  <settings defaultResolver="default"/>

  <property name="local-maven2-dir" value="${user.home}/.m2/repository/" />

  <include url="${ivy.default.settings.dir}/ivysettings-public.xml"/>
  <include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
  <include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
  <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>

  <caches lockStrategy="${ivy.lock-strategy}" resolutionCacheDir="${ivy.resolution-cache.dir}" />

  <resolvers>
    <ibiblio name="sonatype-releases" root="https://oss.sonatype.org/content/repositories/releases" m2compatible="true" />
    <ibiblio name="maven.restlet.com" root="https://maven.restlet.com" m2compatible="true" />
    <ibiblio name="releases.cloudera.com" root="https://repository.cloudera.com/artifactory/libs-release-local" m2compatible="true" />

    <filesystem name="local-maven-2" m2compatible="true" local="true">
      <artifact
          pattern="${local-maven2-dir}/[organisation]/[module]/[revision]/[module]-[revision].[ext]" />
      <ivy
          pattern="${local-maven2-dir}/[organisation]/[module]/[revision]/[module]-[revision].pom" />
    </filesystem>

    <chain name="default" returnFirst="true" checkmodified="true" changingPattern=".*SNAPSHOT">
      <resolver ref="local"/>
      <!-- <resolver ref="local-maven-2" /> -->
      <resolver ref="main"/>
      <resolver ref="maven.restlet.com" />
      <resolver ref="sonatype-releases" />
      <resolver ref="releases.cloudera.com"/>
    </chain>
  </resolvers>

</ivysettings>
