<!-- ! 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>
	<artifactId>pregelix-dataflow-std-base</artifactId>
	<packaging>jar</packaging>
	<name>pregelix-dataflow-std-base</name>

	<parent>
		<groupId>edu.uci.ics.hyracks</groupId>
		<artifactId>pregelix</artifactId>
		<version>0.2.10-SNAPSHOT</version>
	</parent>


	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</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>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.7.2</version>
				<configuration>
					<forkMode>pertest</forkMode>
					<argLine>-enableassertions -Xmx512m -Dfile.encoding=UTF-8
						-Djava.util.logging.config.file=src/test/resources/logging.properties</argLine>
					<includes>
						<include>**/*TestSuite.java</include>
						<include>**/*Test.java</include>
					</includes>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-clean-plugin</artifactId>
				<version>2.4.1</version>
				<configuration>
					<filesets>
						<fileset>
							<directory>.</directory>
							<includes>
								<include>teststore*</include>
								<include>edu*</include>
								<include>actual*</include>
								<include>build*</include>
								<include>expect*</include>
								<include>ClusterController*</include>
							</includes>
						</fileset>
					</filesets>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>edu.uci.ics.hyracks</groupId>
			<artifactId>hyracks-dataflow-common</artifactId>
			<version>0.2.10-SNAPSHOT</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>edu.uci.ics.hyracks</groupId>
			<artifactId>hyracks-hdfs-core</artifactId>
			<version>0.2.10-SNAPSHOT</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>edu.uci.ics.hyracks</groupId>
			<artifactId>hyracks-storage-am-common</artifactId>
			<version>0.2.10-SNAPSHOT</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>edu.uci.ics.hyracks</groupId>
			<artifactId>hyracks-api</artifactId>
			<version>0.2.10-SNAPSHOT</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
	</dependencies>
</project>
