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

	<artifactId>uimaj-ep-debug</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 structure knowledge for common
UIMA data structures to the Eclipse Debug displays</description>
  <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 incorrectly 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:git:https://github.com/apache/uima-uimaj/uimaj-ep-debug
    </connection>
    <developerConnection>
      scm:git:https://github.com/apache/uima-uimaj/uimaj-ep-debug
    </developerConnection>
    <url>
      https://github.com/apache/uima-uimaj/tree/master/uimaj-ep-debug
    </url>
    <tag>uimaj-3.1.1</tag>
  </scm>
  
  <properties>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
  </properties>
  
	<dependencies>
    <!-- depending on the ep-runtime doesn't work without manual intervention because
         eclipse:eclipse on the ep-runtime doesn't mark the embedded things as "exported".
         It doesn't matter which scope - compile or provided - is used, both fail
      
         Other posts indicate that plugins should have explicit dependencies, anyway.
         And, it lets these plugins work when the library plugin is "open" in the same workspace.
      -->
    <!--dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-ep-runtime</artifactId>
      <version>${uimaj-release-eclipse-version}</version>
      <scope>compile</scope>       
    </dependency-->
    
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-core</artifactId>
      <version>${project.parent.version}</version>
      <scope>compile</scope>
    </dependency>
    
    <!-- next dependency is commented out due to Maven 2.0.7 throwing NPE 
         Might be related to https://jira.codehaus.org/browse/MNG-3086 -->
		<!--dependency>
			<groupId>org.eclipse.ui</groupId>
			<artifactId>org.eclipse.ui</artifactId>
			<version>3.2.0</version>
			<scope>provided</scope>
		</dependency-->
    
		<dependency>
			<groupId>org.eclipse.jdt</groupId>
			<artifactId>org.eclipse.jdt.debug.ui</artifactId>
			<version>3.2.0</version>
			<scope>provided</scope>
			
			<!-- https://issues.apache.org/jira/browse/UIMA-5252 -->
      <exclusions>
        <exclusion>
          <groupId>org.eclipse.platform</groupId>
          <artifactId>org.eclipse.swt</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.eclipse.platform</groupId>
          <artifactId>org.eclipse.ui.workbench</artifactId>
        </exclusion>       
        <exclusion>
          <groupId>org.eclipse.platform</groupId>
          <artifactId>org.eclipse.search</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.eclipse.platform</groupId>
          <artifactId>org.eclipse.ui.ide</artifactId>
        </exclusion>
      </exclusions>
		</dependency>
    
    <!-- dependencies added to overcome 3.6 maven central corrupted upload -->
    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>org.eclipse.core.filesystem</artifactId>
      <version>1.0.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>org.eclipse.core.resources</artifactId>
      <version>3.2.1</version>
      <scope>provided</scope>      
    </dependency>
    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>org.eclipse.core.runtime</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>      
    </dependency>
    <dependency>
      <groupId>org.eclipse.equinox</groupId>
      <artifactId>org.eclipse.equinox.common</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>      
    </dependency>
    <dependency>
      <groupId>org.eclipse.osgi</groupId>
      <artifactId>org.eclipse.osgi</artifactId>
      <version>3.2.1</version>
      <scope>provided</scope>      
    </dependency>
    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>org.eclipse.core.expressions</artifactId>
      <version>3.2.1</version>
      <scope>provided</scope>      
    </dependency>
    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>org.eclipse.core.variables</artifactId>
      <version>3.1.100</version>
      <scope>provided</scope>      
    </dependency>
    <dependency>
      <groupId>org.eclipse.ant</groupId>
      <artifactId>org.eclipse.ant.core</artifactId>
      <version>3.1.100</version>
      <scope>provided</scope>      
    </dependency>
    <dependency>
      <groupId>org.eclipse.equinox</groupId>
      <artifactId>org.eclipse.equinox.registry</artifactId>
      <version>3.2.1</version>
      <scope>provided</scope>      
    </dependency>
    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>org.eclipse.core.jobs</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>      
    </dependency>
    <dependency>
      <groupId>org.eclipse.equinox</groupId>
      <artifactId>org.eclipse.equinox.preferences</artifactId>
      <version>3.2.1</version>
      <scope>provided</scope>      
    </dependency>
    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>org.eclipse.core.contenttype</artifactId>
      <version>3.2.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.debug_${parsedVersion.osgiVersion}</finalName>   	    
		<plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <configuration>
          <instructions>
            <!-- turn off "uses" generation because Eclipse 3.2.x doesn't work with them -->
            <_nouses>true</_nouses>
            <Export-Package>
              org.apache.uima.ep_debug
            </Export-Package>
            
            <Bundle-Activator>org.apache.uima.ep_debug.DebugPlugin</Bundle-Activator>
            <Bundle-SymbolicName>org.apache.uima.debug;singleton:=true</Bundle-SymbolicName>
             
            <!-- 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)
            -->
            <!-- 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.ui.plugin
            </Import-Package>  

            <Eclipse-AutoStart>true</Eclipse-AutoStart>
          </instructions>
        </configuration>
      </plugin>      		
		</plugins>
	</build>
</project>