<!--
   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>
	<groupId>org.apache.uima</groupId>
	<artifactId>uimaj-core</artifactId>
	<packaging>jar</packaging>
	<version>${uimaj-release-version}</version>
	<name>Apache UIMA Java Framework Core</name>
	<url>http://incubator.apache.org/uima</url>
	<licenses>
		<license>
			<name>The Apache Software License, Version 2.0</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
			<distribution>repo</distribution>
		</license>
	</licenses>
  <scm>
    <url>http://svn.apache.org/viewvc/incubator/uima</url>
  </scm>    
	<parent>
		<groupId>org.apache.uima</groupId>
		<artifactId>uimaj</artifactId>
		<version>2.3.0-incubating</version> <!-- this comment is a flag for changeVersion -->
    <relativePath>../uimaj</relativePath>
	</parent>
	<dependencies>
	    <dependency>
	      <groupId>log4j</groupId>
	      <artifactId>log4j</artifactId>
	      <version>1.2.8</version>
	      <scope>provided</scope>
        <optional>true</optional>
	    </dependency>
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimaj-test-util</artifactId>
			<version>${uimaj-release-version}</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<finalName>uima-core</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
          <!-- testing on 64 bit Linux requires larger heap -->
					<argLine>-Xmx650M</argLine>
				</configuration>
			</plugin>		
		</plugins>
	</build>
</project>