<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--

 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.clerezza</groupId>
  <artifactId>uima</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Clerezza - Apache UIMA extension module</name>
  <description>Apache UIMA extension modules enable usage of UIMA for enhanced metadata extraction inside Clerezza
  </description>
  <parent>
    <groupId>org.apache.clerezza</groupId>
    <artifactId>clerezza</artifactId>
    <version>0.5</version>
    <relativePath>../parent</relativePath>
  </parent>
  <properties>
    <uima.version>2.3.1</uima.version>
  </properties>
  <modules>
    <module>uima.ontologies</module>
    <module>uima.ontologies.ao</module>
    <module>uima.utils</module>
    <module>uima.casconsumer</module>
    <module>uima.metadata-generator</module>
    <module>uima.concept-tagging</module>
    <module>uima.samples</module>
  </modules>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.uima</groupId>
        <artifactId>uimaj-core</artifactId>
        <version>${uima.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.uima</groupId>
        <artifactId>uimaj-component-test-util</artifactId>
        <version>${uima.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.uima</groupId>
        <artifactId>uimaj-document-annotation</artifactId>
        <version>${uima.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.clerezza</groupId>
        <artifactId>maven-pladoc-plugin.core</artifactId>
      </plugin>
      <plugin>
        <groupId>org.ops4j.pax.exam</groupId>
        <artifactId>maven-paxexam-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>