<!--
 ! 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>texthelper</artifactId>
  <name>texthelper</name>

  <parent>
    <groupId>org.apache.hyracks</groupId>
    <artifactId>text-example</artifactId>
    <version>0.2.17-incubating</version>
  </parent>

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

  <dependencies>
  	<dependency>
  		<groupId>org.apache.hyracks</groupId>
  		<artifactId>hyracks-dataflow-std</artifactId>
  		<version>0.2.17-incubating</version>
  		<scope>compile</scope>
  	</dependency>
  	<dependency>
  		<groupId>org.apache.hyracks</groupId>
  		<artifactId>hyracks-api</artifactId>
  		<version>0.2.17-incubating</version>
  		<scope>compile</scope>
  	</dependency>
  	<dependency>
  		<groupId>org.apache.hyracks</groupId>
  		<artifactId>hyracks-data-std</artifactId>
  		<version>0.2.17-incubating</version>
  	</dependency>
  </dependencies>
  <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>
</project>
