<?xml version='1.0'?>
<!--
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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.rya</groupId>
        <artifactId>rya.extras</artifactId>
        <version>3.2.12-incubating-SNAPSHOT</version>
    </parent>

    <artifactId>rya.geoindexing</artifactId>
    <packaging>pom</packaging>

    <name>Apache Rya Geo Indexing Projects</name>
    <description>
        This parent has several alternative implementations using different libraries or versions of the same library.  
        Specifically 
            Geomesa depends on geotools v5.1 and 
            GeoWave depends on geotools v6.
        See the module poms for the actual versions.
     </description>

     <modules>
        <!-- common for all implementations  -->
        <!-- geomesa for accumulo, uses geotools (not compatible with geowave's dependencies)   -->
        <!-- geo wave for accumulo, uses geotools (not compatible with geomesa's dependencies)  -->
        <!-- mongo native geo, not accumulo  -->
        <module>geo.common</module>
        <module>geo.geomesa</module>
        <module>geo.geowave</module>
        <module>geo.mongo</module>
    </modules>
</project>