<?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.4.1-SNAPSHOT</version>
    <relativePath>../uimaj-parent/pom.xml</relativePath>
  </parent>
  
	<artifactId>uimaj-ep-pear-packager</artifactId>
  <version>2.4.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>Apache UIMA Eclipse: ${project.artifactId}</name>
  <description>Provides an Eclipse Wizard to construct
    a PEAR package</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 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:svn:http://svn.apache.org/repos/asf/uima/uimaj/trunk/uimaj-ep-pear-packager
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/uima/uimaj/trunk/uimaj-ep-pear-packager
    </developerConnection>
    <url>
      http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-ep-pear-packager
    </url>
  </scm>
  
  <properties>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
  </properties>

	<dependencies>
    <!-- UIMA 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>
    			
    <!-- Eclipse dependencies -->
    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>org.eclipse.core.resources</artifactId>
      <version>3.2.0</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.jdt</groupId>
			<artifactId>org.eclipse.jdt.core</artifactId>
			<version>3.2.0</version>
			<scope>provided</scope>
		</dependency>	
    <dependency>
      <groupId>org.eclipse.ui</groupId>
      <artifactId>org.eclipse.ui.ide</artifactId>
      <version>3.2.0</version>      
      <scope>provided</scope>
    </dependency>
    <!-- next one causes NPE with maven 2.0.7.  Might be related to http://jira.codehaus.org/browse/MNG-3086 -->   
    <!--dependency>
      <groupId>org.eclipse.ui</groupId>
      <artifactId>org.eclipse.ui</artifactId>
      <version>3.2.0</version>
    </dependency-->
    
    <!-- the need for this one may go away when the ui dependency 
         can be included -->
    <dependency>
      <groupId>org.eclipse.swt</groupId>
      <artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>   

    <!-- These next dependencies are just to lock down the
         transitive dependencies of the above.
         This was done because on Sept 7 2010 somebody uploaded
         corrupted versions of these to maven central. -->
 
    <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.core</groupId>
      <artifactId>org.eclipse.core.contenttype</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.runtime.compatibility.auth</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.filesystem</artifactId>
      <version>1.0.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.ant</groupId>
      <artifactId>org.eclipse.ant.core</artifactId>
      <version>3.1.100</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>    
	</dependencies>
	<build>
    
    <!-- don't use artifactId as first part of finalName, follow instead the eclipse convention -->  
    <finalName>org.apache.uima.pear_${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.pear,
              org.apache.uima.pear.actions,
              org.apache.uima.pear.generate,
              org.apache.uima.pear.insd.edit,
              org.apache.uima.pear.insd.edit.vars,
              org.apache.uima.pear.nature
            </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.
                               
               There are 4 packages in org.eclipse.jface.* that are "split" between bundles 
                  org.eclipse.jface.text and org.eclipse.text.
                 Packages:
                  org.eclipse.jface.text
                  org.eclipse.jface.text.link
                  org.eclipse.jface.text.source
                  org.eclipse.jface.text.templates 
               org.eclipse.ui.texteditor is split between 
                 org.eclipse.ui.editors and org.eclipse.ui.workbench.texteditor.
                 Packages: 
                  org.eclipse.ui.texteditor
               There are 5 packages in org.eclipse.ui.*  that are split between 
                 org.eclipse.ui.ide and org.eclipse.ui.workbench.  
                 The Notes say not to require org.eclipse.ui.workbench, but instead just require
                    org.eclipse.ui (which imports and reexports org.eclipse.ui.workbench packages).
                 Packages:
                  org.eclipse.ui
                  org.eclipse.ui.actions
                  org.eclipse.ui.dialogs
                  org.eclipse.ui.model
                  org.eclipse.ui.part
               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.jface.text,
org.eclipse.text,
org.eclipse.ui.editors,
org.eclipse.ui.workbench.texteditor,
org.eclipse.ui.ide,
org.eclipse.ui,
org.eclipse.ui.workbench,
org.eclipse.core.runtime
            </Require-Bundle>
            <Import-Package>              
              !org.eclipse.core.runtime,
              !org.eclipse.ui,
              !org.eclipse.ui.dialogs,
              !org.eclipse.ui.model, 
              *
            </Import-Package> 
    
            <Bundle-Activator>org.apache.uima.pear.PearPlugin</Bundle-Activator>
            <Bundle-SymbolicName>org.apache.uima.pear;singleton:=true</Bundle-SymbolicName>
            
            <Eclipse-AutoStart>true</Eclipse-AutoStart>
          </instructions>
        </configuration>
      </plugin>  
		</plugins>
	</build>
</project>