<?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.    
-->

<!-- packaged as a single project.
     PEAR packaging not appropriate, because user needs to define own type system, etc.
  -->

<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>uima-addons-parent</artifactId>
    <version>2.3.2-SNAPSHOT</version>
    <relativePath>../uima-addons-parent</relativePath>
  </parent>

  <artifactId>BSFAnnotator</artifactId>
  <packaging>jar</packaging>
  <version>2.3.2-SNAPSHOT</version>
  <name>Apache UIMA Annotator: ${project.artifactId}</name>
  <description>Annotator to run scripts using Apache's Bean Scripting Framework</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/addons/trunk/BSFAnnotator
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/uima/addons/trunk/BSFAnnotator
    </developerConnection>
    <url>
      http://svn.apache.org/viewvc/uima/addons/trunk/BSFAnnotator
    </url>
  </scm>
  
  <properties>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
    <uimaDependencyVersion>2.10.2</uimaDependencyVersion>
    <pearMainDescriptor>desc/BSFAnnotator.xml</pearMainDescriptor>
  </properties>
  
	<dependencies>
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimaj-core</artifactId>
      <version>${uimaDependencyVersion}</version>
      <scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimaj-test-util</artifactId>
      <version>${uimaDependencyVersion}</version>
      <scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimaj-component-test-util</artifactId>
      <version>${uimaDependencyVersion}</version>
      <scope>test</scope>
		</dependency>
    
		<dependency>
			<groupId>bsf</groupId>
			<artifactId>bsf</artifactId>
			<version>2.4.0</version>
		</dependency>
		<dependency>
			<groupId>org.beanshell</groupId>
			<artifactId>bsh</artifactId>
			<version>2.0b4</version>
		</dependency>
		<dependency>
			<groupId>rhino</groupId>
			<artifactId>js</artifactId>
			<version>1.7R2</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
      <!-- don't use 1.2.15 - google:
        Resolving log4j 1.2.15 dependency problems in Maven using exclusions -->
			<version>1.2.14</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging-api</artifactId>
			<version>1.1</version>
		</dependency>
	</dependencies>
  
	<build>
		<finalName>uimaj-an-bsf</finalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <executions>
            <execution>
              <id>default-cli</id>
              <configuration>
                <excludes>
                  <exclude>release.properties</exclude> <!-- release generated artifact -->
                  <exclude>README*</exclude>
                  <exclude>RELEASE_NOTES*</exclude>
                  <exclude>issuesFixed/**</exclude> <!-- generated file -->
                  <exclude>marker-file-identifying-*</exclude> <!-- empty file -->
                  <exclude>DEPENDENCIES</exclude>  <!-- generated file -->
                  
                  <exclude>src/main/java/org/apache/uima/annotator/bsf/types/Firstname*.java</exclude> <!-- JCasgen generated file -->
                  <exclude>src/main/java/org/apache/uima/annotator/bsf/types/Nickname*.java</exclude> <!-- JCasgen generated file -->
                  <exclude>src/main/java/org/apache/uima/annotator/bsf/types/Token*.java</exclude> <!-- JCasgen generated file -->
                  <exclude>src/test/resources/Nicknames*.txt</exclude> <!-- test data -->
                  <exclude>src/test/resources/testdoc*.txt</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>
                <!-- These imports are in case some included scripting thing needs them, I think 7-2011 MIS -->
                <Import-Package>org.python.*;tcl.lang.*;org.apache.xpath.*;COM.*;com.sun.*;javax.jms.*;netrexx.lang.*;*</Import-Package>
                <!-- the export-package instruction is not needed, but if omitted, 
                     causes extraneous exports of org, org.apache, ... etc. of names 
                     which are leading subsets of the two package names, and 
                     gives a warning message; the extraneous ones are then discarded -->
                <!-- Export-Package>org.apache.uima.annotator.bsf,org.apache.uima.annotator.bsf.types</Export-Package-->
              </instructions>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins> 
	</build>
</project>
