<?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.
  -->
<!--
  This exists soley to simplify the execution of apache-rat over the entire
	code base of Metron.
  -->
<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>
	<groupId>org.apache.metron</groupId>
	<artifactId>Metron</artifactId>
	<version>0.1BETA</version>
	<packaging>pom</packaging>
	<name>Metron</name>
	<description>Performs release auditing for Metron.</description>
	<url>https://metron.incubator.apache.org/</url>
	<build>
    <plugins>
			<plugin>
				<groupId>org.apache.rat</groupId>
				<artifactId>apache-rat-plugin</artifactId>
				<version>0.11</version>
				<configuration>
					<excludes>
						<exclude>**/README.md</exclude>
						<exclude>**/VERSION</exclude>
						<exclude>**/*.json</exclude>
						<exclude>**/*.log</exclude>
						<exclude>**/*.ldif</exclude>
						<exclude>**/*.template</exclude>
						<exclude>**/.*</exclude>
						<exclude>**/.*/**</exclude>
						<exclude>**/*.seed</exclude>
						<exclude>**/ansible.cfg</exclude>
						<exclude>site/**</exclude>
						<exclude>metron-ui/lib/public/**</exclude>
						<exclude>**/src/main/resources/patterns/**</exclude>
						<exclude>**/src/main/resources/SampleInput/**</exclude>
						<exclude>**/dependency-reduced-pom.xml</exclude>
					  <exclude>**/files/opensoc-ui</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
