<?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>uimafit</artifactId>
	<packaging>pom</packaging>
	<name>Apache UIMA uimaFIT</name>
	<description>Factories, Injection, and Testing library for UIMA</description>
	<url>${uimaWebsiteUrl}</url>
	<inceptionYear>2012</inceptionYear>
	<parent>
		<groupId>org.apache.uima</groupId>
		<artifactId>uimafit-parent</artifactId>
		<version>2.3.0-SNAPSHOT</version>
		<relativePath>uimafit-parent</relativePath>
	</parent>
	<properties>
		<jiraVersion>12332459</jiraVersion>
	</properties>
	<scm>
		<connection>scm:svn:http://svn.apache.org/repos/asf/uima/uimafit/trunk/</connection>
		<developerConnection>scm:svn:https://svn.apache.org/repos/asf/uima/uimafit/trunk/</developerConnection>
		<url>http://svn.apache.org/repos/asf/uima/uimafit/trunk/</url>
	</scm>

	<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>uimafit-core</artifactId>
			<version>2.3.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimafit-cpe</artifactId>
			<version>2.3.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimafit-legacy-support</artifactId>
			<version>2.3.0-SNAPSHOT</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <source>${maven.compiler.source}</source>
                </configuration>
				<executions>
					<execution>
						<id>javadocs-distr</id> <!-- name should match one in parent-pom -->
						<phase>prepare-package</phase>
						<goals>
							<goal>javadoc</goal>
						</goals>
						<configuration>
							<doctitle>Apache uimaFIT ${project.version} User-Level API Documentation</doctitle>
							<windowtitle>Apache uimaFIT ${project.version} User-Level API Documentation</windowtitle>
							<notimestamp>true</notimestamp>
							<links>
								<link>http://uima.apache.org/d/uimaj-${uima.version}/apidocs/</link>
							</links>
							<groups>
								<group>
									<title>uimaFIT</title>
									<packages>org.apache.uima.fit.component*:org.apache.uima.fit.descriptor*:org.apache.uima.fit.factory*:org.apache.uima.fit.pipeline*:org.apache.uima.fit.testing*:org.apache.uima.fit.util*</packages>
								</group>
								<group>
									<title>CPE support</title>
									<packages>org.apache.uima.fit.cpe*</packages>
								</group>
							</groups>
							<sourcepath>uimafit-core/src/main/java;uimafit-cpe/src/main/java</sourcepath>
							<!-- Exclude UIMA types and internal API -->
							<excludePackageNames>*.type:*.internal.*:*.impl.*</excludePackageNames>
						</configuration>
					</execution>
				</executions>
			</plugin>

		</plugins>
	</build>

	<modules>
		<module>uimafit-core</module>
		<module>uimafit-examples</module>
		<module>uimafit-spring</module>
		<module>uimafit-maven-plugin</module>
		<module>uimafit-legacy-support</module>
		<module>uimafit-docbook</module>
		<module>uimafit-cpe</module>
		<module>uimafit-parent</module>
	</modules>

	<profiles>
		<profile>
			<id>apache-release</id>
			<build>
				<!-- Run jira report -->
				<!-- depends on having -DjiraVersion set -->
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-changes-plugin</artifactId>
                        <version>2.11</version>
						<inherited>false</inherited>
						<executions>
							<execution>
								<id>default-cli</id>
								<goals>
									<goal>jira-report</goal>
								</goals>
								<phase>generate-resources</phase>
								<configuration>
									<fixVersionIds>${jiraVersion}</fixVersionIds>
									<component>uimaFIT,uimaFIT-Maven-Plugin</component>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>    
</project>