
	<!--
		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>SimpleUIMAAsService</artifactId>
	<packaging>jar</packaging>
	<version>2.3.0-incubating-SNAPSHOT</version>
	<name>Apache UIMA Simple AS Service</name>
	<url>http://incubator.apache.org/uima</url>
	
	<parent>
		<groupId>org.apache.uima</groupId>
		<artifactId>SandboxDistr</artifactId>
		<version>2.3.0-incubating-SNAPSHOT</version> <!-- this comment is a flag for changeVersion -->
		<relativePath>../SandboxDistr</relativePath>
	</parent>
	
	<dependencies>
        <dependency>
        	<groupId>org.apache.uima</groupId>
        	<artifactId>uimaj-as-activemq</artifactId>
        	<version>2.3.0-incubating-SNAPSHOT</version>
        	<scope>provided</scope>
        </dependency>
        <dependency>
	      <groupId>org.apache.uima</groupId>
	      <artifactId>SimpleServer</artifactId>
	      <version>2.3.0-incubating-SNAPSHOT</version>
	      <scope>compile</scope>
	    </dependency>
	</dependencies>
	<build>
		<finalName>simple-uima-as-service</finalName>
	</build>
</project>

