<?xml version="1.0" encoding="UTF-8"?>
<!-- 
  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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.apache.metron</groupId>
		<artifactId>Metron-Streaming</artifactId>
		<version>0.1BETA</version>
	</parent>
	<artifactId>Metron-MessageParsers</artifactId>
    <properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>	
    </properties>
	<dependencies>
		<dependency>
			<groupId>org.apache.metron</groupId>
			<artifactId>Metron-Common</artifactId>
			<version>${project.parent.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.metron</groupId>
			<artifactId>Metron-EnrichmentAdapters</artifactId>
			<version>${project.parent.version}</version>
		</dependency>
		<dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${global_hadoop_version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>servlet-api</artifactId>
                    <groupId>javax.servlet</groupId>
                </exclusion>
            </exclusions>
        </dependency>
		<dependency>
			<groupId>org.apache.storm</groupId>
			<artifactId>storm-core</artifactId>
			<version>${global_storm_version}</version>
			<scope>provided</scope>
			<exclusions>
				<exclusion>
				   <artifactId>servlet-api</artifactId>
				   <groupId>javax.servlet</groupId>
				</exclusion>
				<exclusion>
				   <artifactId>log4j-over-slf4j</artifactId>
				   <groupId>org.slf4j</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${global_junit_version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>${global_hbase_guava_version}</version>
		</dependency>

		<dependency>
			<groupId>io.thekraken</groupId>
			<artifactId>grok</artifactId>
			<version>0.1.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.kafka</groupId>
			<artifactId>kafka_2.9.2</artifactId>
			<version>${global_kafka_version}</version>
			<exclusions>
				<!--exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId>
                    </exclusion -->
				<exclusion>
					<groupId>log4j</groupId>
					<artifactId>log4j</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.metron</groupId>
			<artifactId>Metron-TestingUtilities</artifactId>
			<version>${project.parent.version}</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<reporting>
		<plugins>
			<!-- Normally, dependency report takes time, skip it -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-project-info-reports-plugin</artifactId>
				<version>2.7</version>

				<configuration>
					<dependencyLocationsEnabled>false</dependencyLocationsEnabled>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>emma-maven-plugin</artifactId>
				<version>1.0-alpha-3</version>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-pmd-plugin</artifactId>
				<configuration>
					<targetJdk>1.7</targetJdk>
				</configuration>
				
			</plugin>
		</plugins>
	</reporting>
	<build>
	<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<inherited>true</inherited>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
			</plugins>
		<resources>
		<resource>
				<directory>src/main/resources</directory>
			</resource>
			<resource>
				<directory>src/main/resources/patterns</directory>
			</resource>
			<resource>
				<directory>src/test/resources</directory>
			</resource>
		</resources>
	</build>
</project>
