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

       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>
  <!--
  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="repo.maven.local"
    value="file://${user.home}/.m2/repository/"
    override="false"/>
  <property name="snapshot.apache.org"
    value="http://people.apache.org/repo/m2-snapshot-repository/"
    override="false"/>
  <property name="maven2.pattern"
    value="[organisation]/[module]/[revision]/[module]-[revision]"/>
  <property name="maven2.pattern.ext"
    value="${maven2.pattern}.[ext]"/>

  <!-- pull in the local repository -->
  <include url="${ivy.default.conf.dir}/ivyconf-local.xml"/>
  <settings defaultResolver="default"/>
  <resolvers>
    <ibiblio name="maven2"
      root="${repo.maven.org}"
      pattern="${maven2.pattern.ext}"
      m2compatible="true"
      />
    <ibiblio name="java.net-maven2" 
      root="http://download.java.net/maven/2/" 
      pattern="${maven2.pattern.ext}" 
      m2compatible="true" 
    /> 
    <ibiblio name="apache-snapshot"
      root="${snapshot.apache.org}"
      pattern="${maven2.pattern.ext}"
      m2compatible="true"
      />
    <ibiblio name="maven2-local"
     root="${repo.maven.local}"
     pattern="${maven2.pattern.ext}"
     m2compatible="true"
     usepoms="true"
     useMavenMetadata="true">
    </ibiblio>
    <chain name="default" dual="true">
      <resolver ref="local"/>
      <resolver ref="maven2-local"/>
      <resolver ref="maven2"/>
      <resolver ref="java.net-maven2"/>
    </chain>
    <chain name="internal">
      <resolver ref="local"/>
    </chain>
    <chain name="external">
      <resolver ref="maven2"/>
    </chain>
    <chain name="external-and-snapshots">
      <resolver ref="maven2"/>
      <resolver ref="apache-snapshot"/>
    </chain>
  </resolvers>
    
  <modules>
    <!-- Force gora modules to be resolved locally -->
    <module organisation="org.apache.gora" name=".*" resolver="local"/>
  </modules>

</ivysettings>

