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

     https://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>
	<properties file="${ivy.settings.dir}/ivysettings.properties" />
	<settings defaultResolver="install"/>
	<caches defaultCacheDir="${cache.dir}" />
	<resolvers>
		<filesystem name="install">
			<ivy pattern="${ivy.basedir}/build/test/install/[organisation]/[module]/[artifact]-[revision].[ext]"/>
			<artifact pattern="${ivy.basedir}/build/test/install/[organisation]/[module]/[artifact]-[revision].[ext]"/>
		</filesystem>
		<filesystem name="transactional">
			<ivy pattern="${ivy.basedir}/build/test/transactional/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/>
			<artifact pattern="${ivy.basedir}/build/test/transactional/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/>
		</filesystem>
	</resolvers>
</ivysettings>
