<ivysettings>

 <!--
   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.
-->

 <!--
  see http://www.jayasoft.org/ivy/doc/configuration
  -->
  <!-- you can override this property to use mirrors
          http://repo1.maven.org/maven2/
          http://mirrors.dotsrc.org/maven2
          http://ftp.ggi-project.org/pub/packages/maven2
          http://mirrors.sunsite.dk/maven2
          http://public.planetmirror.com/pub/maven2
          http://ibiblio.lsu.edu/main/pub/packages/maven2
          http://www.ibiblio.net/pub/packages/maven2
  -->

  <property name="repo.maven.org" value="http://repo1.maven.org/maven2/" override="false"/>
  <property name="snapshot.apache.org" value="https://repository.apache.org/content/repositories/snapshots/" override="false"/>
  <property name="maven2.pattern" value="[organisation]/[module]/[revision]/[module]-[revision](-[classifier])"/>
  <property name="repo.dir" value="${user.home}/.m2/repository" override="false"/>
  <property name="maven2.pattern.ext"  value="${maven2.pattern}.[ext]"/>
  <property name="sourceforge-repo" value="http://www.sourceforge.net/projects"/>
  <property name="resolvers" value="default" override="false"/>
  <!-- pull in the local repository -->
  <include url="${ivy.default.conf.dir}/ivyconf-local.xml"/>
  <settings defaultResolver="${resolvers}"/>

  <resolvers>
    <ibiblio name="maven2" root="${repo.maven.org}" pattern="${maven2.pattern.ext}" m2compatible="true"/>
    <ibiblio name="apache-snapshot" root="${snapshot.apache.org}" m2compatible="true"
             checkmodified="${ivy.checkmodified}" 
             changingPattern="${ivy.changingPattern}"/>

    <url name="datanucleus-repo" m2compatible="true">
      <artifact pattern="${datanucleus.repo}/[organisation]/[module]/[revision]/[module]-[revision](-[classifier]).[ext]"/>
    </url>

    <url name="sourceforge" m2compatible="false" checksums="">
      <artifact pattern="${sourceforge-repo}/[module]/files/[module]/[branch]/[module]-[revision](-[classifier]).[ext]"/>
    </url>

    <filesystem name="fs" m2compatible="true" alwaysCheckExactRevision="true">
       <artifact pattern="${repo.dir}/[organisation]/[module]/[revision]/[module]-[revision](-[classifier]).[ext]"/>
       <ivy pattern="${repo.dir}/[organisation]/[module]/[revision]/[module]-[revision](-[classifier]).pom"/>
    </filesystem>

    <chain name="default" dual="true" returnFirst="true" 
           checkmodified="${ivy.checkmodified}" 
           changingPattern="${ivy.changingPattern}">
      <resolver ref="local" />
      <resolver ref="apache-snapshot"/>
      <resolver ref="maven2"/>
      <resolver ref="datanucleus-repo"/>
      <resolver ref="sourceforge"/>
    </chain>

    <chain name="internal" dual="true">
      <resolver ref="local" />
      <resolver ref="fs"/>
      <resolver ref="apache-snapshot"/>
      <resolver ref="maven2"/>
      <resolver ref="datanucleus-repo"/>
      <resolver ref="sourceforge"/>
    </chain>

    <chain name="external">
      <resolver ref="maven2"/>
      <resolver ref="datanucleus-repo"/>
    </chain>

  </resolvers>

  <modules>
    <module organisation="org.apache.hadoop" name="hadoop-*" resolver="${resolvers}"/>
    <module organisation="org.apache.hive" name=".*" resolver="${resolvers}"/>
  </modules>

  <caches default="${ivy.cache.name}" 
          resolutionCacheDir="${build.ivy.dir}/resolution-cache">
    <cache name="online"/>
    <!--
         Set the defaultTTL to 1000 days. Ivy 2.1.0 allows you to
         set this to "eternal", but we want to maintain backwards
         compatibility with older versions of Ivy which are likely
         to get picked up automatically from a user's $ANT_HOME
         directory.
      -->
    <cache name="offline" defaultTTL="1000d"/>
  </caches>
</ivysettings>
