<?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.uima</groupId>
    <artifactId>uima-addons-parent</artifactId>
    <version>2.3.1</version>
    <relativePath>../uima-addons-parent</relativePath>
  </parent>

  <artifactId>TikaAnnotator</artifactId>
  <version>2.3.1</version>
  <name>UIMA Annotator: ${project.artifactId}</name>
  <url>${uimaWebsiteUrl}</url>

  <!-- Special inheritance note
even though the <scm> element that follows is exactly the
same as those in super poms, it cannot be inherited because
there is some special code that computes the connection elements
from the chain of parent poms, if this is omitted.

Keeping this a bit factored allows cutting/pasting the <scm>
element, and just changing the following two properties -->
  <scm>
    <connection>
      scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject}
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject}
    </developerConnection>
    <url>
      http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject}
    </url>
  </scm>

  <properties>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
    <uimaDependencyVersion>2.3.1</uimaDependencyVersion>
    <pearMainDescriptor>desc/MarkupAnnotator.xml</pearMainDescriptor>
  </properties>

  <dependencies>
    <!-- versions from parent -->
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-core</artifactId>
      <version>${uimaDependencyVersion}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-document-annotation</artifactId>
      <version>${uimaDependencyVersion}</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.tika</groupId>
      <artifactId>tika-core</artifactId>
      <version>0.7</version>
    </dependency>
    <dependency>
      <groupId>org.apache.tika</groupId>
      <artifactId>tika-parsers</artifactId>
      <version>0.7</version>
      <exclusions>
        <exclusion>
          <groupId>pdfbox</groupId>
          <artifactId>pdfbox</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-component-test-util</artifactId>
      <version>${uimaDependencyVersion}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

  <build>
    <finalName>uima-an-tika</finalName>

    <resources>
      <resource>
        <directory>desc</directory>
      </resource>
    </resources>
    
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <executions>
            <execution>
              <id>default-cli</id>
              <configuration>
                <excludes>
                  <exclude>release.properties</exclude> <!-- release generated artifact -->
                  <exclude>README*</exclude>
                  <exclude>RELEASE_NOTES*</exclude>
                  <exclude>issuesFixed/**</exclude> <!-- generated file -->
                  <exclude>marker-file-identifying-*</exclude> <!-- empty file -->
                  <exclude>DEPENDENCIES</exclude>  <!-- generated file -->
                  
                  <exclude>src/main/java/org/apache/uima/tika/AttributeFS*.java</exclude> <!-- JCasgen generated -->
                  <exclude>src/main/java/org/apache/uima/tika/FeatureValue*.java</exclude> <!-- JCasgen generated -->
                  <exclude>src/main/java/org/apache/uima/tika/MarkupAnnotation*.java</exclude> <!-- JCasgen generated -->
                  <exclude>src/main/java/org/apache/uima/tika/SourceDocumentAnnotation*.java</exclude> <!-- JCasgen generated -->
                </excludes>              
              </configuration>
            </execution>
          </executions>
        </plugin>         
      </plugins>
    </pluginManagement>    
    
  </build>
</project>