<!--
   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.
-->
<ivy-module version="2.0"  xmlns:maven="http://ant.apache.org/ivy/maven">
  <info organisation="org.apache.lucene" module="spatial-extras"/>
  <configurations defaultconfmapping="compile->master;test->master">
    <conf name="compile" transitive="false"/>
    <conf name="test" transitive="false"/>
  </configurations>
  <dependencies>
    <dependency org="org.locationtech.spatial4j" name="spatial4j" rev="${/org.locationtech.spatial4j/spatial4j}" conf="compile"/>

    <dependency org="org.locationtech.spatial4j" name="spatial4j" rev="${/org.locationtech.spatial4j/spatial4j}" conf="test">
      <artifact name="spatial4j" type="test" ext="jar" maven:classifier="tests" />
    </dependency>

    <dependency org="org.slf4j" name="slf4j-api" rev="${/org.slf4j/slf4j-api}" conf="test"/>

    <exclude org="*" ext="*" matcher="regexp" type="${ivy.exclude.types}"/>
  </dependencies>
</ivy-module>