<?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.uima</groupId>
		<artifactId>uimafit-parent</artifactId>
		<version>2.3.0</version>
		<relativePath>../uimafit-parent</relativePath>
	</parent>
	<artifactId>uimafit-legacy-support</artifactId>
	<name>Apache UIMA uimaFIT - Legacy uimaFIT support</name>
	<description>Adds support for uimaFIT 1.x annotations.</description>
	<url>${uimaWebsiteUrl}</url>
	<licenses>
		<license>
			<name>Apache License, Version 2.0</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
			<distribution>repo</distribution>
		</license>
	</licenses>
	<dependencies>
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimaj-core</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimafit-core</artifactId>
			<version>2.3.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.uimafit</groupId>
			<artifactId>uimafit</artifactId>
			<version>1.4.0</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.uima</groupId>
				<artifactId>jcasgen-maven-plugin</artifactId>
				<executions>
					<execution>
						<phase>generate-test-resources</phase>
						<goals>
							<goal>generate</goal>
						</goals>
						<configuration>
							<typeSystemIncludes>
								<typeSystemInclude>src/test/resources/org/apache/uima/fit/type/**/*.xml</typeSystemInclude>
							</typeSystemIncludes>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<!--
					This plug-in adds the jcasgen generated source code folder as a project
					source folder
				-->
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>build-helper-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>add-test-source</id>
						<phase>process-test-resources</phase>
						<goals>
							<goal>add-test-source</goal>
						</goals>
						<configuration>
							<sources>
								<source>${project.build.directory}/generated-sources/jcasgen</source>
							</sources>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.rat</groupId>
					<artifactId>apache-rat-plugin</artifactId>
					<executions>
						<execution>
							<id>default-cli</id>
							<configuration>
								<excludes>
                                    <!-- Plain documentation -->
                                    <exclude>README*</exclude>
                                    <!-- Release files -->
                                    <exclude>RELEASE_NOTES*</exclude>
                                    <exclude>issuesFixed/**</exclude>
                                    <exclude>release.properties</exclude>
                                    <!-- Build controls -->
                                    <exclude>.activate-enforce-compatibility</exclude>
									<!-- These test files are unreasonable to bear a license header -->
									<exclude>src/test/resources/data/docs/unix-newlines.txt.bin</exclude>
									<exclude>src/test/resources/data/docs/windows-newlines.txt.bin</exclude>
									<exclude>src/test/resources/data/docs/bad.xcas</exclude>
									<exclude>src/test/resources/data/docs/test.xcas</exclude>
									<exclude>src/test/resources/data/docs/test.xmi</exclude>
									<exclude>src/test/resources/data/reference/JCasBuilderTest.dump</exclude>
									<exclude>src/test/resources/data/reference/test.xmi.dump</exclude>
									<!-- These configuration files cannot bear a license header -->
									<exclude>src/test/resources/META-INF/org.uimafit/fsindexes.txt</exclude>
									<exclude>src/test/resources/META-INF/org.uimafit/types.txt</exclude>
								</excludes>
							</configuration>
						</execution>
					</executions>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>