<?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-example-extensions</artifactId>
  <name>Apache UIMA Ruta: ${project.artifactId}</name>
  <parent>
    <groupId>org.apache.uima</groupId>
    <artifactId>ruta-ep-parent</artifactId>
    <version>3.1.0</version>
    <relativePath>../../ruta-ep-parent/pom.xml</relativePath>
  </parent>
  <properties>
    <postNoticeText />
  </properties>
  <url>${uimaWebsiteUrl}</url>
  <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-ep-ide</artifactId>
      <version>${project.parent.version}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-ep-ide-ui</artifactId>
      <version>${project.parent.version}</version>
    </dependency>
    <dependency>
      <groupId>org.antlr</groupId>
      <artifactId>antlr-runtime</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.antlr</groupId>
          <artifactId>stringtemplate</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>${eclipseP2RepoId}</groupId>
      <artifactId>org.eclipse.equinox.app</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>${eclipseP2RepoId}</groupId>
      <artifactId>org.eclipse.emf.ecore.xmi</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <!-- don't use artifactId as first part of finalName, follow instead the eclipse convention -->
    <finalName>org.apache.uima.ruta.example.extensions_${parsedVersion.osgiVersion}</finalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <executions>
            <execution>
              <id>default-cli</id>
              <configuration>
                <excludes combine.children="append">
                  <exclude>src/test/resources/org/apache/uima/ruta/example/extensions/*.txt</exclude> <!-- test data -->
                  <exclude>src/test/resources/org/apache/uima/ruta/example/extensions/*ruta</exclude> <!-- test data -->
                </excludes>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>

    <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.example.extensions
                </_exportcontents>
                <Require-Bundle>
                  org.apache.uima.runtime,
                  org.apache.uima.ruta.engine,
                  org.apache.uima.ruta.ide,
                  org.apache.uima.ruta.ide.ui,
                  org.eclipse.dltk.core;bundle-version="3.0.0"
                </Require-Bundle>
                <Import-Package>
                </Import-Package>
                <Bundle-SymbolicName>org.apache.uima.ruta.example.extensions;singleton:=true</Bundle-SymbolicName>
                <Bundle-RequiredExecutionEnvironment>JavaSE-1.8</Bundle-RequiredExecutionEnvironment>
                <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
                <Eclipse-ExtensibleAPI>true</Eclipse-ExtensibleAPI>
                <!-- <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy> -->
                <Eclipse-BuddyPolicy>registered</Eclipse-BuddyPolicy>
                <Eclipse-RegisterBuddy>org.apache.uima.runtime,org.apache.uima.ruta.engine</Eclipse-RegisterBuddy>
              </instructions>
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>
  </build>
</project>