<!--
 ! Copyright 2009-2013 by The Regents of the University of California
 ! Licensed 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 from
 ! 
 !     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>
		<artifactId>asterix</artifactId>
		<groupId>org.apache.asterix</groupId>
		<version>0.8.7-SNAPSHOT</version>
	</parent>
	<artifactId>asterix-runtime</artifactId>

  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
      <comments>A business-friendly OSS license</comments>
    </license>
  </licenses>


	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<fork>true</fork>
				</configuration>
			</plugin>
	      	<plugin>
	        	<groupId>org.apache.asterix</groupId>
	        	<artifactId>lexer-generator-maven-plugin</artifactId>
	        	<version>0.8.7-SNAPSHOT</version>
	        	<configuration>
	        	  	<grammarFile>src/main/resources/adm.grammar</grammarFile>
	        	  	<outputDir>${project.build.directory}/generated-sources/org.apache/asterix/runtime/operators/file/adm</outputDir>
	        	</configuration>
	        	<executions>
		          	<execution>
		          		<id>generate-lexer</id>
            			<phase>generate-sources</phase>
			            <goals>
	              			<goal>generate-lexer</goal>
	            		</goals>
	          		</execution>
	        	</executions>
	      	</plugin>
	      	 <plugin>
			    <groupId>org.codehaus.mojo</groupId>
			    <artifactId>build-helper-maven-plugin</artifactId>
			    <version>1.9</version>
			    <executions>
			        <execution>
			            <id>add-source</id>
			            <phase>generate-sources</phase>
			            <goals>
			                <goal>add-source</goal>
			            </goals>
			            <configuration>
			                <sources>
			                    <source>${project.build.directory}/generated-sources/</source>
			                </sources>
			            </configuration>
			        </execution>
			    </executions>
 			</plugin>
	    </plugins>
		<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.asterix
										</groupId>
										<artifactId>
											lexer-generator-maven-plugin
										</artifactId>
										<versionRange>
											[0.1,)
										</versionRange>
										<goals>
											<goal>generate-lexer</goal>
										</goals>
									</pluginExecutionFilter>
									<action>
										<execute>
											<runOnIncremental>false</runOnIncremental>
										</execute>
									</action>
								</pluginExecution>
								<pluginExecution>
									<pluginExecutionFilter>
										<groupId>
											org.codehaus.mojo
										</groupId>
										<artifactId>
											build-helper-maven-plugin
										</artifactId>
										<versionRange>
											[1.7,)
										</versionRange>
										<goals>
											<goal>add-source</goal>
										</goals>
									</pluginExecutionFilter>
									<action>
										<ignore />
									</action>
								</pluginExecution>
							</pluginExecutions>
						</lifecycleMappingMetadata>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>

	<dependencies>
		<dependency>
			<groupId>org.apache.asterix</groupId>
			<artifactId>asterix-om</artifactId>
			<version>0.8.7-SNAPSHOT</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.asterix</groupId>
			<artifactId>asterix-fuzzyjoin</artifactId>
			<version>0.8.7-SNAPSHOT</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.hyracks</groupId>
			<artifactId>hyracks-storage-am-btree</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.asterix</groupId>
			<artifactId>asterix-transactions</artifactId>
			<version>0.8.7-SNAPSHOT</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.twitter4j</groupId>
			<artifactId>twitter4j-core</artifactId>
			<version>2.2.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-client</artifactId>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
		         <groupId>org.apache.hyracks</groupId>
		         <artifactId>hyracks-api</artifactId>
	        </dependency>
	</dependencies>

</project>

