<?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.5.0-SNAPSHOT</version>
		<relativePath>uimafit-parent</relativePath>
	</parent>
	<properties>
		<jiraVersion>2.4.0uimaFIT</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.5.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimafit-cpe</artifactId>
			<version>2.5.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimafit-legacy-support</artifactId>
			<version>2.5.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-benchmark</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>