<!--
 ! 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-storage-am-btree-test</artifactId>
  <name>hyracks-storage-am-btree-test</name>

  <parent>
    <groupId>org.apache.hyracks</groupId>
    <artifactId>hyracks-tests</artifactId>
    <version>0.2.18-SNAPSHOT</version>
  </parent>

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

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0.2</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
          <fork>true</fork>
        </configuration>
      </plugin>
    </plugins>

  </build>
  <dependencies>
  	<dependency>
  		<groupId>org.apache.hyracks</groupId>
  		<artifactId>hyracks-storage-am-btree</artifactId>
  		<version>0.2.18-SNAPSHOT</version>
  		<type>jar</type>
  		<scope>compile</scope>
  	</dependency>
  	<dependency>
  		<groupId>org.apache.hyracks</groupId>
  		<artifactId>hyracks-test-support</artifactId>
  		<version>0.2.18-SNAPSHOT</version>
  		<type>jar</type>
  		<scope>test</scope>
  	</dependency>
  </dependencies>
</project>
