<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>ruta-ep-engine</artifactId>
  <parent>
    <groupId>org.apache.uima</groupId>
    <artifactId>ruta-parent</artifactId>
    <version>3.3.0</version>
    <relativePath>../ruta-parent/pom.xml</relativePath>
  </parent>

  <name>Apache UIMA Ruta Eclipse: ${project.artifactId}</name>
  <url>${uimaWebsiteUrl}</url>
  <description>Provides the UIMA Ruta engine to other Eclipse 
    plugins for their use</description>

  <properties>
    <postNoticeText>${uniWueNoticeText}

      This product contains htmlparser libraries (http://htmlparser.sourceforge.net/),
      licensed under the Common Public License.
    </postNoticeText>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
  </properties>

  <scm>
    <connection>scm:git:https://github.com/apache/uima-ruta/</connection>
    <developerConnection>scm:git:https://github.com/apache/uima-ruta/</developerConnection>
    <url>https://github.com/apache/uima-ruta/</url>
    <tag>ruta-3.3.0</tag>
  </scm>

  <dependencies>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-core</artifactId>
      <version>${project.parent.version}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-core-ext</artifactId>
      <version>${project.parent.version}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.antlr</groupId>
      <artifactId>antlr-runtime</artifactId>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <groupId>org.antlr</groupId>
          <artifactId>stringtemplate</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.htmlparser</groupId>
      <artifactId>htmlparser</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-collections4</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-text</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimafit-core</artifactId>
      <scope>compile</scope>
      <!-- Exclude aop stuff, which is not need by uimafit
        and only introduces a non-asl license -->
      <exclusions>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
        </exclusion>
        <exclusion>
          <groupId>aopalliance</groupId>
          <artifactId>aopalliance</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-math3</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging-api</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <scope>compile</scope>
      <!-- Exclude aop stuff, which is not need by uimafit
        and only introduces a non-asl license -->
      <exclusions>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
        </exclusion>
        <exclusion>
          <groupId>aopalliance</groupId>
          <artifactId>aopalliance</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <scope>compile</scope>
    </dependency>
    
    <dependency>
      <groupId>com.github.ben-manes.caffeine</groupId>
      <artifactId>caffeine</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>1.7.30</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.30</version>
    </dependency>

  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/readme_src</directory>
      </resource>
    </resources>

    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <executions>
          <execution>
            <id>uima-bundle</id>
            <configuration>
              <instructions>
                <_nouses>true</_nouses>
                <_exportcontents>
                  org.apache.uima.ruta,
                  org.apache.uima.ruta.action,
                  org.apache.uima.ruta.condition,
                  org.apache.uima.ruta.constraint,
                  org.apache.uima.ruta.descriptor,
                  org.apache.uima.ruta.cache,
                  org.apache.uima.ruta.engine,
                  org.apache.uima.ruta.expression,
                  org.apache.uima.ruta.expression.annotation,
                  org.apache.uima.ruta.expression.bool,
                  org.apache.uima.ruta.expression.feature,
                  org.apache.uima.ruta.expression.list,
                  org.apache.uima.ruta.expression.number,
                  org.apache.uima.ruta.expression.resource,
                  org.apache.uima.ruta.expression.string,
                  org.apache.uima.ruta.expression.type,
                  org.apache.uima.ruta.extensions,
                  org.apache.uima.ruta.parser,
                  org.apache.uima.ruta.resource,
                  org.apache.uima.ruta.rule,
                  org.apache.uima.ruta.rule.quantifier,
                  org.apache.uima.ruta.seed,
                  org.apache.uima.ruta.type,
                  org.apache.uima.ruta.utils,
                  org.apache.uima.ruta.verbalize,
                  org.apache.uima.ruta.visitor,
                  org.apache.uima.ruta.block.fst,
                  org.apache.uima.ruta.block,
                  org.apache.uima.ruta.string.*,
                  org.antlr.runtime,
                  org.antlr.runtime.debug,
                  org.antlr.runtime.misc,
                  org.antlr.runtime.tree,
                  org.htmlparser,
                  org.htmlparser.*,
                  org.apache.commons.text.*,
                  org.apache.commons.lang3.*,
                  org.apache.commons.logging,
                  org.apache.commons.io.*,
                  org.apache.uima.fit.*,
                  org.apache.commons.math3.*,
                  org.springframework.*
                </_exportcontents>

                <Import-Package>
                  !org.apache.uima.fit.*,
                  !bsh, 
                  !com.sun.net.httpserver,
                  !edu.emory.mathcs.backport.java.util.concurrent,
                  !groovy.lang, 
                  !javax.annotation,
                  !javax.ejb,
                  !javax.el, 
                  !javax.inject,
                  !javax.interceptor, 
                  !javax.jms,
                  !javax.management, 
                  !javax.management.modelmbean, !javax.management.openmbean,
                  !javax.management.remote,
                  !javax.naming, 
                  !javax.persistence.spi, !javax.rmi,
                  !javax.servlet,
                  !javax.swing, 
                  !javax.swing.border,
                  !javax.swing.event,
                  !javax.swing.text, 
                  !javax.swing.tree, 
                  !javax.validation,
                  !javax.validation.bootstrap,
                  !javax.validation.metadata, 
                  !javax.xml.namespace,
                  !javax.xml.parsers, 
                  !javax.xml.stream,
                  !javax.xml.stream.events,
                  !javax.xml.stream.util,
                  !javax.xml.transform, 
                  !javax.xml.transform.sax,
                  !javax.xml.transform.stax,
                  !javax.xml.ws, 
                  !javax.xml.*, 
                  !joptsimple,
                  !net.sf.cglib.*, 
                  !net.sf.ehcache.*,
                  !org.antlr.stringtemplate,
                  !org.apache.avalon.framework.logger,
                  !org.apache.log, 
                  !org.apache.log4j,
                  !org.apache.log4j.xml,
                  !org.aspectj.*, 
                  !org.codehaus.groovy.*, 
                  !org.hibernate.* ,
                  !org.joda.*, 
                  !org.jruby.*, 
                  !org.omg.CORBA,
                  !org.springframework.instrument,
                  !org.w3c.dom, 
                  !org.xml.sax, 
                  !org.xml.sax.ext, 
                  !org.xml.sax.helpers,
                  !org.aopalliance.*, 
                  !org.springframework.aop.*,
                  org.apache.uima.*
                </Import-Package>
                <!-- -->
                <Require-Bundle>org.apache.uima.runtime</Require-Bundle>
                <!-- <Import-Package>org.apache.uima, org.apache.uima.analysis_component,
                  org.apache.uima.analysis_engine, org.apache.uima.analysis_engine.annotator,
                  org.apache.uima.analysis_engine.asb, org.apache.uima.analysis_engine.asb.impl,
                  org.apache.uima.analysis_engine.impl, org.apache.uima.analysis_engine.impl.compatibility,
                  org.apache.uima.analysis_engine.metadata, org.apache.uima.analysis_engine.metadata.impl,
                  org.apache.uima.analysis_engine.service.impl, org.apache.uima.cas, org.apache.uima.cas.admin,
                  org.apache.uima.cas.impl, org.apache.uima.cas.text, org.apache.uima.cas_data,
                  org.apache.uima.cas_data.impl, org.apache.uima.flow, org.apache.uima.flow.impl,
                  org.apache.uima.impl, org.apache.uima.internal.util, org.apache.uima.internal.util.rb_trees,
                  org.apache.uima.internal.util.text, org.apache.uima.jcas, org.apache.uima.jcas.cas,
                  org.apache.uima.jcas.impl, org.apache.uima.jcas.tcas, org.apache.uima.resource,
                  org.apache.uima.resource.impl, org.apache.uima.resource.metadata, org.apache.uima.resource.metadata.impl,
                  org.apache.uima.resource.service.impl, org.apache.uima.search, org.apache.uima.search.impl,
                  org.apache.uima.uimacpp, org.apache.uima.util, org.apache.uima.util.impl,
                  </Import-Package> -->
                <Embed-Dependency>*;scope=compile</Embed-Dependency>
                <!-- <Embed-Transitive>true</Embed-Transitive> -->
                <Bundle-SymbolicName>org.apache.uima.ruta.engine;singleton:=true</Bundle-SymbolicName>
                <Bundle-RequiredExecutionEnvironment>JavaSE-1.8</Bundle-RequiredExecutionEnvironment>
                <Eclipse-ExtensibleAPI>true</Eclipse-ExtensibleAPI>
                <!-- <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy> -->
                <Eclipse-BuddyPolicy>registered</Eclipse-BuddyPolicy>
                <Eclipse-RegisterBuddy>org.apache.uima.runtime</Eclipse-RegisterBuddy>
              </instructions>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>copyDependentJars</id>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.outputDirectory}</outputDirectory>
              <excludeArtifactIds>uimaj-core,uimaj-tools,uimaj-document-annotation,uimaj-adapter-vinci,jVinci,uimaj-cpe,tools,aopalliance,spring-aop,stringtemplate,antlr</excludeArtifactIds>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>