<?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>uimaj-parent</artifactId>
    <version>3.4.1</version>
    <relativePath>../uimaj-parent/pom.xml</relativePath>
  </parent>

  <artifactId>uimaj-ep-launcher</artifactId>
  <packaging>jar</packaging>
  <name>Apache UIMA Eclipse: ${project.artifactId}</name>
  <!-- continuation lines need to start in col 1 else manifest has extra blanks -->
  <description>Adds launch support for Analysis Engines </description>
  <url>${uimaWebsiteUrl}</url>

  <dependencies>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-core</artifactId>
      <version>${project.parent.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.bitbucket.mstrobel</groupId>
          <artifactId>procyon-compilertools</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.bitbucket.mstrobel</groupId>
          <artifactId>procyon-core</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>${eclipseP2RepoId}</groupId>
      <artifactId>org.eclipse.jdt.debug.ui</artifactId>
      <version>[3.8.0, 4.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>${eclipseP2RepoId}</groupId>
      <artifactId>org.eclipse.jface</artifactId>
      <version>[3.13.0, 4.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>${eclipseP2RepoId}</groupId>
      <artifactId>org.eclipse.jdt.ui</artifactId>
      <version>[3.12.0,4.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>${eclipseP2RepoId}</groupId>
      <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
      <version>[3.2.0,5.0.0)</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <configuration>
          <manifestLocation>META-INF</manifestLocation>
          <instructions>
            <Export-Package>
              org.apache.uima.ep_launcher
            </Export-Package>
            <Bundle-Activator>org.apache.uima.ep_launcher.LauncherPlugin</Bundle-Activator>
            <Bundle-SymbolicName>org.apache.uima.launcher;singleton:=true</Bundle-SymbolicName>
            <Require-Bundle>
              org.eclipse.core.runtime
            </Require-Bundle>
            <Import-Package>
              !org.eclipse.core.runtime,
              org.eclipse.core.resources,
              org.eclipse.core.variables,
              org.eclipse.core.commands.common,
              org.eclipse.debug.core,
              org.eclipse.debug.ui,
              org.eclipse.debug.ui.sourcelookup,
              org.eclipse.debug.core.model,
              org.eclipse.jdt.debug.ui.launchConfigurations,
              org.eclipse.jdt.launching,
              org.eclipse.jface.layout,
              org.eclipse.jface.preference,
              org.eclipse.jface.viewers,
              org.eclipse.jface.window,
              org.eclipse.jface.dialogs,
              org.eclipse.swt,
              org.eclipse.swt.events,
              org.eclipse.swt.layout,
              org.eclipse.swt.widgets,
              org.eclipse.ui,
              org.eclipse.ui.dialogs,
              org.eclipse.ui.model,
              org.eclipse.ui.plugin,
              org.osgi.framework;version="1.3"
            </Import-Package>
            <Eclipse-AutoStart>true</Eclipse-AutoStart>
            <Plugin-Class>org.apache.uima.ep_launcher.LauncherPlugin</Plugin-Class>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>