<!--
   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-as</artifactId>
  <packaging>pom</packaging>
  <version>2.3.0-incubating</version> <!-- this comment is a flag for changeVersion -->
  
  <parent>
    <groupId>org.apache.uima</groupId>
    <artifactId>uimaj</artifactId>   
    <!-- the version of base UIMA this version goes with -->
    <version>2.3.0-incubating</version> <!-- this comment is a flag for changeVersion -->
    <relativePath>../uimaj</relativePath>
    
  </parent>
  <properties>
      <uimaj-as-release-version>2.3.0-incubating</uimaj-as-release-version>
      <uimaj-as-release-eclipse-version>2.3.0.incubating</uimaj-as-release-eclipse-version>
  </properties>

  <name>Apache UIMA Asynch Scaleout framework</name>
  <description>An extension to the Apache UIMA framework and SDK, using JMS messaging to support scaleout.</description>
 
  <modules>
    <module>../uimaj-as-core</module>
    <module>../uimaj-as-jms</module>
    <!-- activemq depends on jms -->
    <!-- ordering here doesn't set the ordering of the build,
         that is set according to dependencies
         see http://maven.apache.org/pom.html#Aggregation -->
    <module>../uimaj-as-activemq</module>
    <module>../uimaj-as-camel</module>
    <module>eclipse-plugin-superPom</module>
  </modules>
  
</project>