<!--
 ! 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>hyracks</artifactId>
  <packaging>pom</packaging>
  <name>hyracks</name>

  <parent>
    <groupId>org.apache.hyracks</groupId>
    <artifactId>apache-hyracks</artifactId>
    <version>0.3.3</version>
  </parent>

  <build>
    <pluginManagement>
      <plugins>
        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-plugin-plugin</artifactId>
                    <versionRange>[0.0,)</versionRange>
                    <goals>
                      <goal>descriptor</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <properties>
    <root.dir>${basedir}/..</root.dir>
  </properties>

  <modules>
    <module>hyracks-util</module>
    <module>hyracks-ipc</module>
    <module>hyracks-api</module>
    <module>hyracks-comm</module>
    <module>hyracks-client</module>
    <module>hyracks-dataflow-common</module>
    <module>hyracks-dataflow-std</module>
    <module>hyracks-control</module>
    <module>hyracks-net</module>
    <module>hyracks-data</module>
    <module>hyracks-storage-common</module>
    <module>hyracks-storage-am-common</module>
    <module>hyracks-storage-am-bloomfilter</module>
    <module>hyracks-storage-am-btree</module>
    <module>hyracks-storage-am-lsm-invertedindex</module>
    <module>hyracks-storage-am-lsm-common</module>
    <module>hyracks-storage-am-lsm-btree</module>
    <module>hyracks-storage-am-lsm-rtree</module>
    <module>hyracks-storage-am-rtree</module>
    <module>hyracks-test-support</module>
    <module>hyracks-tests</module>
    <module>hyracks-server</module>
    <module>hyracks-examples</module>
    <module>hyracks-documentation</module>
    <!--module>hyracks-hadoop-compat</module-->
    <module>hyracks-maven-plugins</module>
    <module>hyracks-hdfs</module>
    <module>hyracks-dist</module>
    <module>hyracks-http</module>
  </modules>
</project>
