<?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>
	<artifactId>ruta-core-ext</artifactId>

	<name>Apache UIMA Ruta: ${project.artifactId}</name>
	<url>${uimaWebsiteUrl}</url>
	<description>Additional extensions of the UIMA Ruta language</description>

	<parent>
		<groupId>org.apache.uima</groupId>
		<artifactId>ruta-parent</artifactId>
		<version>2.5.0-SNAPSHOT</version>
		<relativePath>../ruta-parent/pom.xml</relativePath>
	</parent>
	<properties>
		<uimaScmProject>${project.artifactId}</uimaScmProject>
		<postNoticeText />
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>ruta-core</artifactId>
			<version>${project.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<scm>
		<url>http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core-ext</url>
		<connection>scm:svn:http://svn.apache.org/repos/asf/uima/ruta/trunk/ruta-core-ext</connection>
		<developerConnection>scm:svn:https://svn.apache.org/repos/asf/uima/ruta/trunk/ruta-core-ext</developerConnection>
	</scm>
	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.rat</groupId>
					<artifactId>apache-rat-plugin</artifactId>
					<executions>
						<execution>
							<id>default-cli</id>
							<configuration>
								<excludes>
									<exclude>src/test/resources/org/apache/uima/ruta/block/fst/*.txt</exclude> <!-- test data -->
                                    <exclude>src/test/resources/org/apache/uima/ruta/action/*.*</exclude> <!-- test data -->
									<exclude>issuesFixed/**</exclude> <!-- generated -->
								</excludes>
							</configuration>
						</execution>
					</executions>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>

</project>