<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="${mvnrepo}" override="true"/>
  <property name="repo.apache.snapshots" value="http://repository.apache.org/content/groups/snapshots-group/" override="false"/>
  <property name="repo.dir" value="${user.home}/.m2/repository"/>
  <property name="maven2.pattern"  value="[organisation]/[module]/[revision]/[module]-[revision](-[classifier])"/> 
  <property name="maven2.pattern.ext" value="${maven2.pattern}.[ext]"/>
  <property name="snapshot.pattern"  value="[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]"/>
  <property name="resolvers" value="default" override="false"/>
  <property name="force-resolve" value="false" override="false"/>
  <!-- pull in the local repository -->
  <include url="${ivy.default.conf.dir}/ivyconf-local.xml"/>
  <settings defaultResolver="${resolvers}"/>
  <resolvers>
    <filesystem name="fs" m2compatible="true" checkconsistency="false" force="${force-resolve}"
         checkmodified="true" changingPattern=".*-SNAPSHOT">
      <artifact pattern="${repo.dir}/${maven2.pattern.ext}"/>
      <ivy pattern="${repo.dir}/[organisation]/[module]/[revision]/[module]-[revision].pom"/>
    </filesystem>
    <ibiblio
      name="jboss"
      m2compatible="true"
      root="https://repository.jboss.org/nexus/content/groups/public"
      pattern="[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]" />

    <ibiblio name="maven2" root="${repo.maven.org}" pattern="${maven2.pattern.ext}" m2compatible="true"/>
    <ibiblio name="apache-snapshots" root="${repo.apache.snapshots}" pattern="${snapshot.pattern}"
         checkmodified="true" changingPattern=".*-SNAPSHOT" m2compatible="true"/>
    <url name="datanucleus-repo" m2compatible="true">
      <artifact pattern="http://www.datanucleus.org/downloads/maven2/[organisation]/[module]/[revision]/[module]-[revision].[ext]"/>
    </url>

    <chain name="default" dual="true" checkmodified="true" changingPattern=".*-SNAPSHOT">
      <resolver ref="fs"/>
      <resolver ref="local"/>
      <resolver ref="maven2"/>
      <resolver ref="datanucleus-repo"/>
      <resolver ref="jboss"/>
      <resolver ref="apache-snapshots"/>
    </chain>
    <chain name="internal">
      <resolver ref="fs"/>
      <resolver ref="apache-snapshots"/>
      <resolver ref="maven2"/>
      <resolver ref="datanucleus-repo"/>
    </chain>
    <chain name="external">
      <resolver ref="maven2"/>
      <resolver ref="datanucleus-repo"/>
    </chain>
  </resolvers>
  <modules>
    <module organisation="org.apache.incubator/hcatalog" name=".*" resolver="internal"/>
  </modules>
</ivysettings>
