<?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>2.11.0</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>

  <properties>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
  </properties>

  <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>
    <!-- don't use artifactId as first part of finalName, follow instead the eclipse convention -->
    <finalName>org.apache.uima.launcher_${parsedVersion.osgiVersion}</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>3.3.0</version>  <!-- override 2.3.7 - getting unresolved refs to some dependencies, fixed by 3.0.1 -->
        <configuration>
          <manifestLocation>META-INF</manifestLocation>
          <instructions>
            <!-- turn off "uses" generation because Eclipse 3.2.x doesn't work with them -->
            <_nouses>true</_nouses>
            <Export-Package>
              org.apache.uima.ep_launcher
            </Export-Package>
             
            <!-- handle split packages in Eclipse.
               We do this by using Require-Bundle, and excluding from the Import-Package those
                 split packages covered by those bundles - this is required by OSGi.
                                
                org.eclipse.core.runtime has combined apis (that were split in later 
                  point releases of 3.x)
            -->
            <Bundle-Activator>org.apache.uima.ep_launcher.LauncherPlugin</Bundle-Activator>
            <Bundle-SymbolicName>org.apache.uima.launcher;singleton:=true</Bundle-SymbolicName>
            <!-- Bundle-RequiredExecutionEnvironment>JavaSE-1.8</Bundle-RequiredExecutionEnvironment invalid value : JavaSE-1.8 --> 
            <!-- NOTE: ANY CONTINUATION LINES for Require-Bundle MUST START IN Col1 else manifest is potentially wrong -->
            <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>