<!--
   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>
    <include url="${easyant.default.ivysettings.url}"/>
    <settings defaultResolver="main"/>
    <resolvers>
        <!--define your own easyant modules repository here 
        <filesystem name="custom-easyant-modules">
            <ivy pattern="${ivy.settings.dir}/repository/shared/[organisation]/[module]/[revision]/[module].ivy"/>
            <artifact pattern="${ivy.settings.dir}/repository/shared/[organisation]/[module]/[revision]/[artifact](-[classifier]).[ext]"/>
        </filesystem>
        -->
        <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"/>
            <resolver ref="public-maven" />
        </chain>
    </resolvers>
 
    <modules>
        <module organisation="*" name="*" resolver="main" />
     </modules>
</ivysettings>
