<!--
   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>
    <!-- Ivy settings for easyant developpers, this should not be included in easyant distribution -->
    <include url="${easyant.default.ivysettings.url}"/>
    <settings defaultResolver="main"/>
    <resolvers>
        <chain name="main" returnFirst="true">
            <!-- core modules provided by easyant full distribution -->
            <resolver ref="easyant-core-modules"/>
            <resolver ref="easyant-shared-modules"/>
            <!-- easyant public repository -->
            <resolver ref="apache-easyant-plugins"/>
            <!-- still necessary for plugins using buildtypes prior to 0.9. Should be remove on next release -->
            <url name="legacy-modules" m2compatible="false">
                <artifact pattern="http://repo.easyant.org/legacy-releases-local/[organisation]/[module]/[revision]/[type]s/[module](-[classifier])-[revision].[ext]" />
                 <ivy pattern="http://repo.easyant.org/legacy-releases-local/[organisation]/[module]/[revision]/[type]s/ivy-[revision].xml" />
            </url>
            <resolver ref="public-maven" />
        </chain>
    </resolvers>
 
    <modules>
        <module organisation="*" name="*" resolver="main" />
     </modules>
</ivysettings>
