<?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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.apache</groupId>
		<artifactId>apache</artifactId>
		<version>16</version>
		<relativePath />
	</parent>

	<groupId>org.apache.opennlp</groupId>
	<artifactId>opennlp</artifactId>
	<version>1.6.0</version>
	<packaging>pom</packaging>

	<name>Apache OpenNLP Reactor</name>

	<prerequisites>
		<maven>3.0</maven>
	</prerequisites>

	<scm>
		<connection>scm:svn:http://svn.apache.org/repos/asf/opennlp/tags/opennlp-1.6.0-rc2</connection>
		<developerConnection>scm:svn:https://svn.apache.org/repos/asf/opennlp/tags/opennlp-1.6.0-rc2</developerConnection>
		<url>http://svn.apache.org/viewvc/opennlp/tags/opennlp-1.6.0-rc2</url>
	</scm>

	<mailingLists>
		<mailingList>
			<name>Apache OpenNLP Users</name>
			<subscribe>users-subscribe@opennlp.apache.org</subscribe>
			<unsubscribe>users-unsubscribe@opennlp.apache.org</unsubscribe>
			<post>users@opennlp.apache.org</post>
			<archive>http://mail-archives.apache.org/mod_mbox/opennlp-users/</archive>
		</mailingList>

		<mailingList>
			<name>Apache OpenNLP Developers</name>
			<subscribe>dev-subscribe@opennlp.apache.org</subscribe>
			<unsubscribe>dev-unsubscribe@opennlp.apache.org</unsubscribe>
			<post>dev@opennlp.apache.org</post>
			<archive>http://mail-archives.apache.org/mod_mbox/opennlp-dev/</archive>
		</mailingList>

		<mailingList>
			<name>Apache OpenNLP Commits</name>
			<subscribe>commits-subscribe@opennlp.apache.org</subscribe>
			<unsubscribe>commits-unsubscribe@opennlp.apache.org</unsubscribe>
			<archive>http://mail-archives.apache.org/mod_mbox/opennlp-commits/</archive>
		</mailingList>

		<mailingList>
			<name>Apache OpenNLP Issues</name>
			<subscribe>issues-subscribe@opennlp.apache.org</subscribe>
			<unsubscribe>issues-unsubscribe@opennlp.apache.org</unsubscribe>
			<archive>http://mail-archives.apache.org/mod_mbox/opennlp-issues/</archive>
		</mailingList>
	</mailingLists>

	<issueManagement>
		<system>jira</system>
		<url>https://issues.apache.org/jira/browse/OPENNLP</url>
	</issueManagement>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>4.8.1</version>
				<scope>test</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-release-plugin</artifactId>
					<configuration>
						<useReleaseProfile>false</useReleaseProfile>
						<goals>deploy</goals>
						<arguments>-Papache-release</arguments>
						<mavenExecutorId>forked-path</mavenExecutorId>
					</configuration>
				</plugin>

				<plugin>
					<groupId>org.apache.felix</groupId>
					<artifactId>maven-bundle-plugin</artifactId>
					<!-- Version 2.3.5 breaks backward compatibility with java 5,
					but the build must run on java 5! -->
					<version>2.3.4</version>
				</plugin>
			</plugins>
		</pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<compilerArgument>-Xlint</compilerArgument>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.rat</groupId>
				<artifactId>apache-rat-plugin</artifactId>
				<executions>
					<execution>
						<id>default-cli</id>
						<goals>
							<goal>check</goal>
						</goals>
						<phase>verify</phase>
						<configuration>
							<excludes>
								<!-- File generated by maven-release-plugin -->
								<exclude>release.properties</exclude>
							</excludes>
							<numUnapprovedLicenses>1000000</numUnapprovedLicenses>
						</configuration>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<artifactId>maven-javadoc-plugin</artifactId>
				<executions>
					<execution>
						<id>create-javadoc-jar</id>
						<goals>
							<goal>jar</goal>
						</goals>
						<phase>package</phase>
						<configuration>
							<show>public</show>
							<quiet>true</quiet>
							<use>false</use> <!-- Speeds up the build of the javadocs -->
						</configuration>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<artifactId>maven-source-plugin</artifactId>
				<executions>
					<execution>
						<id>create-source-jar</id>
						<goals>
							<goal>jar</goal>
						</goals>
						<phase>package</phase>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-eclipse-plugin</artifactId>
				<version>2.8</version>
				<configuration>
					<workspace>../</workspace>
					<workspaceCodeStylesURL>http://opennlp.apache.org/code-formatter/OpenNLP-Eclipse-Formatter.xml</workspaceCodeStylesURL>
				</configuration>
			</plugin>

		</plugins>
	</build>

	<profiles>
		<profile>
		<id>apache-release</id>
		<build>
			<plugins>
				<plugin>
					<groupId>org.apache.rat</groupId>
					<artifactId>apache-rat-plugin</artifactId>
					<executions>
						<execution>
							<id>default-cli</id>
							<configuration>
								<numUnapprovedLicenses>0</numUnapprovedLicenses>
							</configuration>
						</execution>
					</executions>
				</plugin>
			</plugins>
		</build>
		</profile>
	</profiles>

	<modules>
		<module>opennlp-tools</module>
		<module>opennlp-uima</module>
		<module>opennlp-docs</module>
		<module>opennlp-distr</module>
	</modules>

</project>
