<?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.
-->

<!--
  This is the common UIMA parent pom.
  It contains the project-wide defaults:
  
    The parent of this POM is the official common Apache POM
    
    Defines repositories for
      Snapshots - at Apache - used during development, and for docbook olinks 
      Eclipse - where the good poms are
      Central - adds default check-the checksums
      
    PluginManagement defaults:
      Java 1.5 as the base
      Javadoc at 1.5 too
      Jar Manifest entries, including the build-time
      AntRun to pick a later version of ant with support for ant extensions like "if"
      
    Specify plugin levels for non-standard plugins:
      RAT
      eclipse   
    
-->

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <artifactId>apache</artifactId>
    <groupId>org.apache</groupId>
    <version>13</version>
    <relativePath />
  </parent>

  <groupId>org.apache.uima</groupId>
  <artifactId>parent-pom</artifactId>
  <version>8</version>
  <packaging>pom</packaging>
  
  <name>Apache UIMA ${project.artifactId}</name>
  <description>UIMA (Unstructured Information Management Architecture).
    UIMA promotes community development and reuse of annotators
    that extract metadata from unstructured information (text, audio, video, etc.);
    it provides for externalized declaration of type systems,
    component configuration, aggregation, and more,
    supports scalablity, and provides tooling.</description>
    
  <url>${uimaWebsiteUrl}</url>
  <inceptionYear>2006</inceptionYear>
 
  <mailingLists>
    <mailingList>
      <name>Apache UIMA Development List</name>
      <subscribe>dev-subscribe@uima.apache.org</subscribe>
      <unsubscribe>dev-unsubscribe@uima.apache.org</unsubscribe>
      <post>mailto:dev@uima.apache.org</post>
      <archive>
        http://mail-archives.apache.org/mod_mbox/uima-dev
      </archive>
      <otherArchives>
        <otherArchive>
          http://dir.gmane.org/gmane.comp.apache.uima.devel
        </otherArchive>
         <otherArchive>       
           http://uima.markmail.org
        </otherArchive>
      </otherArchives>
    </mailingList>
    <mailingList>
      <name>Apache UIMA Users List</name>
      <subscribe>user-subscribe@uima.apache.org</subscribe>
      <unsubscribe>user-unsubscribe@uima.apache.org</unsubscribe>
      <post>mailto:user@uima.apache.org</post>
      <archive>
        http://mail-archives.apache.org/mod_mbox/uima-user
      </archive>
      <otherArchives>
        <otherArchive>
          http://dir.gmane.org/gmane.comp.apache.uima.general
        </otherArchive>
         <otherArchive>       
           http://uima.markmail.org
        </otherArchive>
      </otherArchives>
    </mailingList>
    <mailingList>
      <name>Apache UIMA Commits List</name>
      <subscribe>commits-subscribe@uima.apache.org</subscribe>
      <unsubscribe>commits-unsubscribe@uima.apache.org</unsubscribe>
      <post>mailto:commits@uima.apache.org</post>
      <archive>
        http://mail-archives.apache.org/mod_mbox/uima-commits
      </archive>
    </mailingList>
  </mailingLists>

  <prerequisites>
    <!-- 2.2.0 is broken when deploying - checksums invalid -->
    <!-- 2.2.1 doesn't work -->
    <maven>3.0</maven>
  </prerequisites>
        
  <scm>
    <connection>
      scm:svn:http://svn.apache.org/repos/asf/uima/build/tags/parent-pom-8
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/uima/build/tags/parent-pom-8
    </developerConnection>
    <url>
      http://svn.apache.org/viewvc/uima/build/tags/parent-pom-8
    </url>
  </scm>
  
  <issueManagement>
    <system>Jira</system>
    <!-- the form of the url is from http://maven.apache.org/plugins/maven-changes-plugin/usage.html -->
    <!--url>https://issues.apache.org/jira/BrowseProject.jspa?projectId=12310570</url-->
    <url>https://issues.apache.org/jira/browse/UIMA</url>
        
  </issueManagement>
  
  <ciManagement>
    <system>Jenkins</system>
    <url>https://builds.apache.org/</url>
    <notifiers />
  </ciManagement>
  
  <!-- distribution management - is inherited from Apache pom
       and specifies 
         https://repository.apache.org/service/local/staging/deploy/maven2
       and for snapshots:
         https://repository.apache.org/content/repositories/snapshots -->
  <!-- for children POMs maven automatically adds their artifactId to the URL below
       unless overridden -->
  <distributionManagement>
    <site>
      <id>uima.apache.org</id> <!-- following maven convention -->
      <name>Apache UIMA Website</name>
      <url>${uimaWebsiteDistributionUrl}</url>  <!-- on people.apache.org: /www/uima.apache.org -->
    </site>  
  </distributionManagement>

  <properties>
    <!--  this property is overridden in child projects that are released, to correspond to the 
          Jira release category(ies) 
          We specify something here, because if accidentally left blank, it 
          generates a giant request for all changes -->
    <jiraVersion>12325064</jiraVersion>  <!-- for parent-pom-8. Change for each release -->
    <uimaBuildResourcesVersion>5</uimaBuildResourcesVersion>
    <uimaWebsiteUrl>http://uima.apache.org</uimaWebsiteUrl>
    <uimaWebsiteDistributionUrl>scp://people.apache.org/www/uima.apache.org/</uimaWebsiteDistributionUrl>
    <maven.build.timestamp.format>yyMMdd_HHmm</maven.build.timestamp.format>
    <buildDateTime>${maven.build.timestamp}</buildDateTime>

    <!-- these properties are for docbook processing. -->     
    <!-- olink databases -->
    <dolArtifactId>uima-docbook-olink</dolArtifactId>
    <dolClassifier>olink</dolClassifier>
    <dolRepo>${settings.localRepository}/org/apache/uima/${dolArtifactId}/1-SNAPSHOT</dolRepo>
    <dolZip>${dolArtifactId}-1-SNAPSHOT-${dolClassifier}.zip</dolZip>
    <dolUnzipped>${dolRepo}/docbook-olink</dolUnzipped>
    <dolBuiltFile>${project.build.directory}/</dolBuiltFile>
    <dolBuiltArtifactFile>${project.build.directory}/${dolZip}</dolBuiltArtifactFile>
    
    <pdfPaperType>USletter</pdfPaperType>
    
    <!-- This next dir *must match* the one the PearPackagingMavenPlugin uses -->
    <pearPackagingDir>${project.build.directory}/pearPackaging</pearPackagingDir>    
  
    <!-- poms wanting this need to set the postNoticeText to this value -->          
    <ibmNoticeText>
Portions of Apache UIMA were originally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant License Agreement", informally known as the
"IBM UIMA License Agreement".
Copyright (c) 2003, 2006 IBM Corporation.         
    </ibmNoticeText> 
    <!-- next line commented out - to let standard source-release assembly descriptor as specified
         in standard Apache parent pom be used -->
    <!-- SourceReleaseAssemblyDescriptor>multimodule-source-release</sourceReleaseAssemblyDescriptor-->  
  </properties>
 
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  
  <!-- can't put this dependency at the top level - 
       causes them to be included in children -->
  <!--dependencies>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uima-build-resources</artifactId>
      <version>1-SNAPSHOT</version>
    </dependency>
  </dependencies-->
  
  <repositories>
    <!-- note: inheritance does *NOT* merge subparts,
         so, redeclare them -->           
    <!-- define repositories for getting Eclipse parts
         because the one in "central" gives broken parts -->
    <repository>
      <id>eclipsePlugins</id>
      <name>Eclipse components</name>
      <layout>default</layout>
      <url>http://repo1.maven.org/eclipse</url>
      
      <releases>
        <updatePolicy>never</updatePolicy>
        <checksumPolicy>fail</checksumPolicy>
      </releases>
      
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>

    <!-- modify central repository access:
         Turn on checksum checking-->
    <repository>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <layout>default</layout>
      <url>http://repo1.maven.org/maven2</url>

      <releases>
        <enabled>true</enabled>
        <checksumPolicy>fail</checksumPolicy>
        <updatePolicy>never</updatePolicy>
      </releases>

      <snapshots>
        <enabled>false</enabled>
      </snapshots>

    </repository>

    <repository>
      <id>apache.snapshots</id>
      <name>Apache Snapshot Repository</name>
      <url>http://repository.apache.org/snapshots</url>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>  
      
  </repositories>
  
  <pluginRepositories>
    <pluginRepository>
      <id>apache.snapshots.plugins</id>
      <name>Apache Snapshot Repository - Maven plugins</name>
      <url>http://repository.apache.org/snapshots</url>
      <layout>default</layout>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
        <checksumPolicy>fail</checksumPolicy>
        <updatePolicy>never</updatePolicy>        
      </snapshots>
    </pluginRepository>
  </pluginRepositories>
  
  <build>
    <pluginManagement>
      <plugins>
      
        <!-- assembly plugin 
             Disable running assembly:assembly with
             warning message to use install instead -->
        <plugin> 
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.4</version> <!--  https://issues.apache.org/jira/browse/UIMA-3332 -->
          <executions>
            <execution>
              <id>default-cli</id>
              <configuration>
                <descriptors>
                  <descriptor>do-not-use--mvn-assembly-assembly--instead-use-mvn-install</descriptor>
                </descriptors>
              </configuration>
            </execution>
          </executions>
        </plugin>
        
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>1.7</version>
        </plugin>
        
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>1.3</version>
        </plugin>
        
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
	        <artifactId>maven-plugin-plugin</artifactId>
	        <configuration>
            <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
	        </configuration>	        
	        <executions>
	          <execution>
	            <!-- force to use process-classes phase so runs after Java Annotations are available -->
	            <!-- https://issues.apache.org/jira/browse/UIMA-3072 -->
	            <id>default-descriptor</id>
	            <phase>process-classes</phase>
	            <goals><goal>descriptor</goal></goals>
	          </execution>
	          <execution>
	          </execution>
	        </executions>
        </plugin>
        
        <!-- set Java 1.5 as the source and target of compilation -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>1.5</source>
            <target>1.5</target>
            <!--encoding>UTF-8</encoding this inherited from apache pom 7 -->
          </configuration>
        </plugin>
        
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.8</version> <!-- see https://issues.apache.org/jira/browse/UIMA-2963 -->
        </plugin>
        
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <!-- remove version after moving to apache parent pom 14 or later -->
          <version>2.9.1</version> <!-- pick up fix for javadoc security issue, June 2013 -->
          <configuration>
            <source>5</source> <!-- needed to do Enums -->
            <notimestamp>true</notimestamp>
            <encoding>UTF-8</encoding>
            <!-- if next is omitted, causes all projects in reactor that don't
                     already have full javadocs built, to have them built -->
            <detectOfflineLinks>false</detectOfflineLinks>
            <quiet>true</quiet>            
            <!-- identify tags we use so we don't get warning messages for them -->
            <tags>
              <tag>
                <name>generated</name>
                <placement>X</placement>
              </tag>
              <tag>
                <name>ordered</name>
                <placement>X</placement>
              </tag>
              <tag>
                <name>modifiable</name>
                <placement>X</placement>
              </tag>
              <tag>
                <name>model</name>
                <placement>X</placement>
              </tag>
              <tag>
                <name>pre</name>
                <placement>X</placement>
              </tag>
            </tags>                          
          </configuration>
          <executions>
            <execution>
              <id>attach-javadocs</id>          
              <goals><goal>jar</goal></goals>
              <!-- turn off javadoc build for each module by default
                   (unless apache-release - for speed) 
                   override in individual cases to turn back on if wanted --> 
              <phase />            
            </execution>
          </executions>          
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.3.2</version>  <!-- version 2.4 gives error org.codehaus.plexus.archiver.jar.Manifest.merge(org.codehaus.plexus.archiver.jar.Manifest) 
                                     see http://comments.gmane.org/gmane.comp.ide.eclipse.plugins.m2eclipse.user/9189 -->
          <configuration>
            <archive>
              <manifestEntries>
                <Project-Title>Apache UIMA</Project-Title>
                <!-- Implementation-Title>${pom.name}</Implementation-Title from addDefaultImplementationEntries-->
                <!-- Implementation-Version>${pom.version}</Implementation-Version from addDefaultImplementationEntries-->
                <!-- Implementation-Vendor>Apache Software Foundation</Implementation-Vendor from addDefaultImplementationEntries-->
                <!-- also added by default: 
                       Implementation-Vendor-Id: ${pom.groupId} -->
                <Implementation-Url>${uimaWebsiteUrl}</Implementation-Url>
                <Implementation-License>http://www.apache.org/licenses/LICENSE-2.0.txt</Implementation-License>
                <Build-Date>${buildDateTime}</Build-Date>
              </manifestEntries>
              <manifest>
                <addDefaultSpecificationEntries>false</addDefaultSpecificationEntries>
              </manifest>
            </archive>
          </configuration>
        </plugin>
        
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.7</version>

          <dependencies>
            <!-- 1.8.2 is used by v 1.7 of this plugin
            <dependency>
              <groupId>org.apache.ant</groupId>
              <artifactId>ant</artifactId>
                version 1.8.0 seems to be incompatible with some part of maven or m2eclipse 
              <version>1.7.1</version>
            </dependency>
             -->
            <dependency> <!-- for ant extension supporting "if" -->
              <groupId>ant-contrib</groupId>
              <artifactId>ant-contrib</artifactId>
              <version>1.0b3</version>
              <scope>runtime</scope>
              <exclusions>
                <exclusion> <!-- is dragging in ant 1.5 -->
                  <groupId>ant</groupId>
                  <artifactId>ant</artifactId>
                </exclusion>
              </exclusions>
              
            </dependency>
            <!-- next two enable <containsregexp> form for filesets -->
            <dependency>
              <groupId>org.apache.ant</groupId>
              <artifactId>ant-apache-regexp</artifactId>
              <version>1.9.2</version>
            </dependency>
            <dependency>
              <groupId>jakarta-regexp</groupId>
              <artifactId>jakarta-regexp</artifactId>
              <version>1.4</version>
            </dependency>
          </dependencies>          
        </plugin>
      
        <!-- deprecated - move to m2eclipse, but keeping for now -->  
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-eclipse-plugin</artifactId>
          <version>2.8</version>
          <configuration>
            <downloadSources>true</downloadSources>
          </configuration>
        </plugin>
        
        <plugin>
          <groupId>org.apache.felix</groupId>
          <artifactId>maven-bundle-plugin</artifactId>
          <!-- version 2.0.0 fails -->
          <!-- version 2.3.4 eliminates spurious warning messages -->
          <!-- version 2.5 has accidental dependency on Java 6 -->
          <version>2.3.7</version>
          <extensions>true</extensions>
          <executions>
            <execution>
              <id>uima-bundle</id>
              <goals><goal>manifest</goal></goals>
              <phase>process-classes</phase>
            </execution>
          </executions>
        </plugin>
        
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <version>0.10</version>
          <executions>
            <execution>
              <id>default-cli</id>
              <goals><goal>check</goal></goals>
              <phase>verify</phase>
              <!-- default configuration -->
              <configuration>
                <excludes>
                  <exclude>release.properties</exclude> <!-- generated file -->
                  <exclude>README*</exclude>
                  <exclude>RELEASE_NOTES*</exclude>
                  <exclude>issuesFixed/**</exclude> <!-- generated file -->
                  <exclude>src/main/resources/docbook-shared/titlepage/*.xsl</exclude>
                  <exclude>marker-file-identifying-*</exclude> <!-- empty file -->
                  <exclude>DEPENDENCIES</exclude>  <!-- generated file -->
				          <exclude>**/MANIFEST.MF</exclude> <!-- MANIFEST.MF files cannot have comments -->
                  <exclude>**/*.ppt</exclude> <!--  power point sources -->
                </excludes>
              </configuration>
            </execution>
          </executions>
        </plugin>
        
        <!-- generate the issuesFixed report of Jiras fixed in this release -->
        <!-- uses the property "jiraVersion" to select the version -->
        <!-- Runs automatically during release.
             Can also be run manually using 
             mvn changes:jira-report -N -DjiraVersion=xxxxxx  where
             xxxxxx is the jira internal version number which you can get 
             from the Jira url (see parameter fixforversion=xxxxxx) 
             by going to https://issues.apache.org/jira/browse/UIMA 
             and selecting "Releases" and then going to the 
             particular version and looking in the url for
             that version. -->        
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-changes-plugin</artifactId>
          <version>2.9</version>  <!-- Apache-wide pom has no entry for this plugin -->
          <executions>
            <execution>
              <id>default-cli</id>
              <goals><goal>jira-report</goal></goals>
              <!-- don't use generate-sources - because javadoc plugin re-exec's that -->
              <phase>generate-resources</phase>        
              <configuration>
                <useJql>true</useJql>
                <fixVersionIds>${jiraVersion}</fixVersionIds>
                <columnNames>Type,Key,Status,Summary</columnNames>
                <resolutionIds>Fixed</resolutionIds>
                <statusIds>Closed,Resolved</statusIds>
                <sortColumnNames>Type, Key</sortColumnNames>
                <!-- changed sortColumnNames for Jira 5
                     was: <sortColumnNames>Status, Key, Type</sortColumnNames>
                 -->
                <outputDirectory>${basedir}/issuesFixed/</outputDirectory>
                <maxEntries>1000</maxEntries> <!-- hopefully, bigger than ever needed -->
              </configuration>
            </execution>
          </executions>
        </plugin>
        
        <plugin>
          <groupId>org.apache.uima</groupId>
          <artifactId>uima-build-helper-maven-plugin</artifactId>
          <version>7</version>
        </plugin>
      </plugins>
    </pluginManagement>
    
    <plugins>
            
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-versions</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireMavenVersion>
                  <version>3.0</version>
                </requireMavenVersion>
                <requireJavaVersion>
                  <version>1.5</version>
                </requireJavaVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
            
      <!-- sets the following properties:
            parsedVersion.majorVersion
            parsedVersion.minorVersion
            parsedVersion.incrementalVersion
            parsedVersion.qualifier
            parsedVersion.buildNumber
            parsedVersion.osgiVersion
      -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>parse-project-version</id>
            <goals><goal>parse-version</goal></goals>
            <configuration>
              <propertyPrefix>parsedVersion</propertyPrefix>
            </configuration>
          </execution>
        </executions>
      </plugin>
      
      <plugin>
        <groupId>org.apache.uima</groupId>
        <artifactId>uima-build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>set buildYear and buildMonth</id>
            <goals><goal>parse-date-time</goal></goals>
            <configuration>
              <parseSpecs>
                <parseSpec>
                  <name>buildYear</name>
                  <format>yyyy</format>
                </parseSpec>
                <parseSpec>
                  <name>buildMonth</name>
                  <format>MMMM</format>
                </parseSpec>                   
              </parseSpecs>
            </configuration>               
          </execution>
        </executions>
      </plugin>     

      <!-- this overrides the apache pom to 
           use this resource bundle which
           allows additional text after the NOTICE file
           
           Note: putting this in the pluginManagement section
           fails to override the configuration from the
           Apache common parent pom -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-remote-resources-plugin</artifactId>
        <executions>      
          <execution>
            <goals><goal>process</goal></goals>
            <configuration>
              <resourceBundles>
                <resourceBundle>org.apache.uima:uima-build-resources:${uimaBuildResourcesVersion}</resourceBundle>
              </resourceBundles>
            </configuration>
          </execution>
        </executions>
        <!--dependencies>  maybe for m2e
	        <dependency>
	          <groupId>org.slf4j</groupId>
	          <artifactId>slf4j-simple</artifactId>
	          <version>1.6.1</version>
	        </dependency>
        </dependencies-->
        
      </plugin>
      
      <plugin> <!-- https://issues.apache.org/jira/browse/UIMA-2966  -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>dup-meta-jar-cleanup</id>
            <goals><goal>run</goal></goals>
            <phase>prepare-package</phase>  <!--  before Jar plugin -->
            <configuration>
              <target>
                <delete file="${project.build.directory}/classes/META-INF/maven/${project.groupId}/${project.artifactId}/pom.xml" quiet="true" />
                <delete file="${project.build.directory}/classes/META-INF/maven/${project.groupId}/${project.artifactId}/pom.properties" quiet="true" />
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>     
    
  </build>
  
  <!--reporting-->
  
  <profiles>   
    
    <!-- ************************************************** -->
    <!-- * apache-release                                 * -->
    <!-- *   NOTE: This profile is activated while        * --> 
    <!-- *    running the Maven build pipeline, usually   * -->
    <!-- *      clean verify (for mvn release:prepare) or * -->
    <!-- *      deploy (for mvn release;perform),         * -->
    <!-- *    but is not activated for the                * -->
    <!-- *    outer execution for mvn release...          * -->
    <!-- *    on the pom being released                   * -->
    <!-- ************************************************** -->
    <!-- fix apache common pom --> 
    <profile>
      <id>apache-release</id>
      <properties>
        <isApacheRelease>true</isApacheRelease>
      </properties>
      
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-javadoc-plugin</artifactId> 
              <executions>
                <execution>
                  <id>attach-javadocs</id>          
                  <goals><goal>jar</goal></goals>
                  <!-- turn back on javadoc build for each module by default  
                       https://issues.apache.org/jira/browse/UIMA-3251 --> 
                  <phase>package</phase>            
                </execution>
              </executions>          
            </plugin>            
          </plugins>
        </pluginManagement>


        <plugins>
        
          <!-- to support multi-module source-release builds -->
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <dependencies>            
              <dependency>
                <groupId>org.apache.uima</groupId>
                <artifactId>uima-build-resources</artifactId>
                <version>${uimaBuildResourcesVersion}</version>
              </dependency>
            </dependencies>
            <executions>
              <execution>
                <id>source-release-assembly</id>
                <!-- note: this is configured above to run only at execution root -->
                <configuration>
                  <!-- by not attaching, we prevent the source release from going to Maven repos -->
                  <!-- https://issues.apache.org/jira/browse/UIMA-3247 -->
                  <attach>false</attach>
                </configuration>
              </execution>
            </executions>            
          </plugin>
          
          <!-- to run source plugin without forking -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>           
            <executions>           
              <execution>
                <id>attach-sources-nf</id>           
                <goals><goal>jar-no-fork</goal></goals>
              </execution>
              <execution>
                <id>attach-sources</id>
                <phase />  <!-- turn off the plain jar one -->
              </execution>             
            </executions>        
          </plugin>
          
          <plugin>
            <groupId>org.apache.rat</groupId>
            <artifactId>apache-rat-plugin</artifactId>
            <executions>
              <execution>
                <id>default-cli</id>
              </execution>
            </executions>
          </plugin>      
          
          <!-- to fix up any generated Javadocs to have consistent line ends in html files -->
          <!-- runs in phase after package -->
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>maybe-fix-javadoc-line-ends</id>
                <phase>pre-integration-test</phase>
                <goals><goal>run</goal></goals>
                <configuration>
                  <target>
                    <taskdef name="if" classname="net.sf.antcontrib.logic.IfTask" />                
                    <if>
                      <available file="${project.build.directory}/site/apidocs/" />
                      <then>
                        <echo>Fixing line-endings for ${project.build.directory}/site/apidocs/</echo>
                        <fixcrlf srcdir="${project.build.directory}/site/apidocs/">
                          <include name="**/*.html" />
                        </fixcrlf>
                      </then>
                    </if>
                  </target>
                </configuration>
              </execution>
              <execution>
                <id>sign and checksum source-release.zip</id>
                <phase>verify</phase>  <!-- after source-release is built -->
                <goals><goal>run</goal></goals>
                <configuration>
                  <target>
                    <taskdef name="if" classname="net.sf.antcontrib.logic.IfTask" />
                    <property name="source-release" location="${project.build.directory}/${project.artifactId}-${project.version}-source-release.zip" />                
                    <if>
                      <available file="${source-release}" /> 
                      <then>
                        <echo message="Generating checksums for source-release.zip" />
                        <checksum format="MD5SUM" algorithm="sha1" file="${source-release}" />
                        <checksum format="MD5SUM" algorithm="md5" file="${source-release}" />
                        <echo message="Generating gpg signatures for source-release.zip" />
                        <exec executable="gpg">
                          <arg value="--detach-sign" />
                          <arg value="--armor" />
                          <arg value="--batch" />
                          <arg value="${source-release}" />
                        </exec>
                      </then>
                    </if>
                  </target>
                </configuration>
              </execution>             
            </executions>          
          </plugin>    
          
        </plugins>
      </build>     
    </profile>

    <!-- *************************************************** -->
    <!-- *   Run Rat report - for Jenkins                  * -->
    <!-- * https://issues.apache.org/jira/browse/UIMA-2590 * -->
    <!-- *************************************************** -->
    <profile>
      <id>run-rat-report</id>
      
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.rat</groupId>
            <artifactId>apache-rat-plugin</artifactId>
            <executions>
              <execution>
                <id>default-cli</id>
              </execution>
            </executions>
          </plugin>          
          
        </plugins>
      </build>     
    </profile>

    <!-- **************************************** -->
    <!-- *   Produce Jira report                * -->
    <!-- **************************************** -->

    <profile>
      <id>mavenJirareport</id>
      <activation>
        <!-- NOTE: if you try to make this work more generally, by 
             using a marker file in all top-level release projects,
             this approach fails because for other top-level
             release projects, it substitutes the value of
             the jiraVersion property from the top level pom, not
             the pom being released.  So other release projects include
             this kind of profile within themselves, in a profile
             for "apache-release" triggered by name. -->
             
        <!-- It would be nice to have this only run when releasing, 
             but the activation clauses are currently only
             "ored" together, not "anded". -->
             
        <file><exists>marker-file-identifying-parent-pom</exists></file>
      </activation>
      <build>
        <plugins>
          <!-- overrides to enable release -->
          <!-- to release 5-SNAPSHOT which includes uima-build-resources, hard code that version to 4 -->
	        <plugin>
		        <groupId>org.apache.maven.plugins</groupId>
		        <artifactId>maven-remote-resources-plugin</artifactId>
		        <executions>      
		          <execution>
		            <goals><goal>process</goal></goals>
		            <configuration>
		              <resourceBundles>
		                <resourceBundle>org.apache.uima:uima-build-resources:${uimaBuildResourcesVersion}</resourceBundle>
		              </resourceBundles>
		            </configuration>
		          </execution>
		        </executions>		        
		      </plugin>
          
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <dependencies>            
              <dependency>
                <groupId>org.apache.uima</groupId>
                <artifactId>uima-build-resources</artifactId>
                <version>${uimaBuildResourcesVersion}</version>
              </dependency>
            </dependencies>
          </plugin>
          
          <plugin>
            <artifactId>maven-changes-plugin</artifactId>
            <executions>
              <execution>
                <id>default-cli</id>
                <configuration>
                  <fixVersionIds>${jiraVersion}</fixVersionIds>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    
    <!-- **************************************** -->
    <!-- * Override - don't produce Jira report * -->
    <!-- **************************************** -->
    
    <!-- NOTE: if you use this, you MUST check in
         the generated Jira report into SVN, otherwise
         it won't appear in the release assemblies. -->
    
    <profile>
      <id>mavenJirareportSkip</id>
      <activation>
        <property>
          <name>maven.jiraReport.skip</name>
        </property>
      </activation>
      <build>
        <plugins>
          <!-- Skip jira report -->
          <plugin>
            <artifactId>maven-changes-plugin</artifactId>
            <executions>
              <execution>
                <id>default-cli</id> 
                <phase />
              </execution>
            </executions>  
          </plugin>
        </plugins>
      </build>

    </profile>
    
    <!-- ********************************** -->
    <!-- *   Docbook Processing           * -->
    <!-- ********************************** -->

  <!-- Skip docbook processing unless
       the leaf child project has a docbook directory -->  
    <profile>
      <id>process-docbook</id>
      <activation>
        <file><exists>src/docbook</exists></file>
      </activation>
     
      <!--dependencies-->
        <!-- can't have a dependency in the parent pom - unless you want it
             inherited by all child poms -->
        <!-- dependency>
          <groupId>org.apache.uima</groupId>
          <artifactId>uima-build-resources</artifactId>
          <version>1-SNAPSHOT</version>
        </dependency -->
        
        <!-- having a dependency specified on 1-SNAPSHOT blocks release --> 
        <!--dependency>
          <groupId>org.apache.uima</groupId>
          <artifactId>${dolArtifactId}</artifactId>
          <type>zip</type>
          <classifier>${dolClassifier}</classifier>
          <version>1-SNAPSHOT</version>
        </dependency-->
      <!--/dependencies-->
      
      
      
      <build>
        <plugins>
          <!-- something to set some properties for dates used in copyright notices -->
          <!-- Works, but is slow due to loading groovy -->      
          <!--plugin>
             <groupId>org.codehaus.groovy.maven</groupId>
             <artifactId>gmaven-plugin</artifactId>
             <version>1.0</version>
             <executions>
                <execution>
                   <phase>prepare-package</phase>
                   <goals>
                      <goal>execute</goal>
                   </goals>
                   <configuration>
                      <source>
                      import java.util.Date 
                      import java.text.MessageFormat 
                      def varYear = MessageFormat.format("{0,date,yyyy}", new Date())
                      def varMonth = MessageFormat.format("{0,date,MMMMMMMMM}", new Date()) 
                      project.properties['buildYear'] = varYear
                      project.properties['buildMonth'] = varMonth
                      </source>
                   </configuration>
                </execution>
             </executions>
          </plugin-->
                    
          <!-- use the dependency:unpack goal to get the shared resource
               that has the docbook-shared directory 
               Unpack into spot relative to project - because
               these are referred to in docbook sources using
               relative references
               
               also unpack next to docbook-olink in
               repository location for olink info, because
               the site.xml files use relative location to
               get at the uima entities -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <!-- use the dependency:unpack goal to get the shared resource
                     that has the docbook-shared directory 
                     Unpack into spot relative to project - because
                     these are referred to in docbook sources using
                     relative references -->
                <id>copyDocbookInfo</id>
                <phase>prepare-package</phase>
                <goals><goal>unpack</goal></goals>
                <configuration>
                  <overWriteIfNewer>true</overWriteIfNewer>
                  <artifactItems>
                    <artifactItem>
                      <groupId>org.apache.uima</groupId>
                      <artifactId>uima-build-resources</artifactId>
                      <version>${uimaBuildResourcesVersion}</version>
                      <includes>docbook-shared/**</includes>
                      <outputDirectory>${project.build.directory}</outputDirectory>
                    </artifactItem>
                  </artifactItems>
                </configuration>
              </execution>

              <execution>
                <!-- also unpack next to docbook-olink in
                     repository location for olink info, because
                     the site.xml files use relative location to
                     get at the uima entities -->
                <id>copyDocbookInfoNextToOlink</id>
                <phase>prepare-package</phase>
                <goals><goal>unpack</goal></goals>
                <configuration>
                  <overWriteIfNewer>true</overWriteIfNewer>
                  <markersDirectory>${dolRepo}/dependency-maven-plugin-markers</markersDirectory>
                  <artifactItems>
                    <artifactItem>
                      <groupId>org.apache.uima</groupId>
                      <artifactId>uima-build-resources</artifactId>
                      <version>${uimaBuildResourcesVersion}</version>
                      <includes>docbook-shared/**</includes>
                      <outputDirectory>${dolRepo}</outputDirectory>
                    </artifactItem>
                  </artifactItems>
                </configuration>
              </execution>

              <!-- use the dependency:unpack goal to get the
                   olink databases  -->
              <execution>
                <id>getOlink</id>
                <phase>prepare-package</phase>
                <goals><goal>unpack</goal></goals>
                <configuration>
                  <overWriteIfNewer>true</overWriteIfNewer>
                  <markersDirectory>${dolRepo}/dependency-maven-plugin-markers</markersDirectory>
                  <artifactItems>
                    <artifactItem>
                      <groupId>org.apache.uima</groupId>
                      <artifactId>${dolArtifactId}</artifactId>
                      <version>1-SNAPSHOT</version>
                      <type>zip</type>
                      <classifier>${dolClassifier}</classifier>
                      <outputDirectory>${dolUnzipped}</outputDirectory>
                    </artifactItem>
                  </artifactItems>
                </configuration>
              </execution>                         
            </executions>
          </plugin>        
          
          <plugin>
            <groupId>com.agilejava.docbkx</groupId>
            <artifactId>docbkx-maven-plugin</artifactId>
            <version>2.0.14</version>
            <configuration>  <!-- general configuration for both html and pdf -->
              <sourceDirectory>${basedir}/src/docbook</sourceDirectory>
              <includes>${bookNameRoot}.xml</includes>
              <highlightSource>1</highlightSource>
              <xincludeSupported>true</xincludeSupported>
              <!-- olink common to pdf and html -->
              <collectXrefTargets>yes</collectXrefTargets>                  
            </configuration>
            <executions>
              <execution>
                <id>html</id>
                <goals>
                  <goal>generate-html</goal>
                </goals>
                <phase>package</phase>
                <configuration>
                  <targetDirectory>${project.build.directory}/site/d</targetDirectory>
                  <htmlCustomization>${project.build.directory}/docbook-shared/top/html-single.xsl</htmlCustomization>
                  <!-- olink -->
                  <targetDatabaseDocument>file:///${dolUnzipped}/htmlsingle/site.xml</targetDatabaseDocument>              
                  <targetsFilename>${dolUnzipped}/htmlsingle/${bookNameRoot}.db</targetsFilename>
                </configuration>
              </execution>
              <execution>
                <id>pdf</id>
                <goals><goal>generate-pdf</goal></goals>
                <phase>package</phase>
                <configuration>
                  <!-- pdf: generate first in docbkx, then move.  
                       because pdf generates an extra temp file xxx.fo
                       which we want to keep a bit in target in case of debug need -->
                       
                  <foCustomization>${project.build.directory}/docbook-shared/top/pdf.xsl</foCustomization>
                  <!-- olink -->
                  <targetDatabaseDocument>file:///${dolUnzipped}/pdf/site.xml</targetDatabaseDocument>
                  <targetsFilename>${dolUnzipped}/pdf/${bookNameRoot}.db</targetsFilename>                 
                  
                  <fop1Extensions>true</fop1Extensions>
                      
                  <fontSelectionStrategy>character-by-character</fontSelectionStrategy>
                  
                  <fonts>
                    <!-- embedded fonts -->
                    <!--
                    This information must exactly match the font specified
                    in the fo file. Otherwise it will use a default font.
            
                    For example,
                    <fo:inline font-family="Arial" font-weight="bold" font-style="normal">
                        Arial-normal-normal font
                    </fo:inline>
                    for the font triplet specified by:
                    <font-triplet name="Arial" style="normal" weight="bold" />
            
                    If you do not want to embed the font in the pdf document
                    then do not include the "embed-url" attribute.
                    The font will be needed where the document is viewed
                    for it to be displayed properly.
            
                    possible styles: normal | italic | oblique | backslant
                    possible weights: normal | bold | 100 | 200 | 300 | 400
                                      | 500 | 600 | 700 | 800 | 900
                    (normal = 400, bold = 700)
                    -->
            
                    <!--
                    <font metrics-url="arial.xml" kerning="yes" embed-url="arial.ttf">
                      <font-triplet name="Arial" style="normal" weight="normal" />
                      <font-triplet name="ArialMT" style="normal" weight="normal" />
                    </font>
                    <font metrics-url="arialb.xml" kerning="yes" embed-url="arialb.ttf">
                      <font-triplet name="Arial" style="normal" weight="bold" />
                      <font-triplet name="ArialMT" style="normal" weight="bold" />
                    </font>
                    -->
                    
                    <!-- per UIMA-1051 - change to use standard Times Roman default PDF font -->
                    <!--font>
                      <name>Palatino</name>
                      <style>normal</style>
                      <weight>normal</weight>
                      <kerning>yes</kerning>
                      <embedFile>c:/Windows/Fonts/pala.TTF</embedFile>
                      <metricsFile>${project.build.directory}/docbook-shared/fonts/palatino.xml</metricsFile>
                    </font>
                    <font>
                      <name>Palatino</name>
                      <style>normal</style>
                      <weight>bold</weight>
                      <kerning>yes</kerning>
                      <embedFile>c:/Windows/Fonts/palab.TTF</embedFile>
                      <metricsFile>${project.build.directory}/docbook-shared/fonts/palatino-bold.xml</metricsFile>
                    </font>
                    <font>
                      <name>Palatino</name>
                      <style>italic</style>
                      <weight>normal</weight>
                      <kerning>yes</kerning>
                      <embedFile>c:/Windows/Fonts/palai.TTF</embedFile>
                      <metricsFile>${project.build.directory}/docbook-shared/fonts/palatino-italic.xml</metricsFile>
                    </font>
                    <font>
                      <name>Palatino</name>
                      <style>italic</style>
                      <weight>bold</weight>
                      <kerning>yes</kerning>
                      <embedFile>c:/Windows/Fonts/palabi.TTF</embedFile>
                      <metricsFile>${project.build.directory}/docbook-shared/fonts/palatino-bold-italic.xml</metricsFile>
                    </font-->
                    
                  </fonts>
                  <paperType>${pdfPaperType}</paperType>                 
                </configuration>
              </execution>          
            </executions>
    
            <dependencies>
              <dependency>
                <groupId>org.docbook</groupId>
                <artifactId>docbook-xml</artifactId>
                <version>4.4</version>
                <scope>runtime</scope>
              </dependency>
            </dependencies>   
          </plugin>
        
          <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              <!-- copy the images to the html/images dir -->  
              <execution>
                <id>docbook-copy-images</id>
                <goals><goal>copy-resources</goal></goals>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/d/images</outputDirectory>
                  <resources>
                    <resource><directory>src/docbook/images</directory></resource>
                  </resources>
                </configuration>
              </execution>
              <!-- copy the css stylesheet to the html dir -->  
              <execution>
                <id>docbook-copy-css</id>
                <goals><goal>copy-resources</goal></goals>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/d/css</outputDirectory>
                  <resources>
                    <resource><directory>${project.build.directory}/docbook-shared/css</directory></resource>
                  </resources>
                </configuration>
              </execution>
              <!-- move the pdf from the docbkx to the site/d/ -->  
              <execution>
                <id>docbook-move-pdf</id>
                <goals><goal>copy-resources</goal></goals>  <!-- no "move" goal, use copy -->
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/d</outputDirectory>
                  <resources>
                    <resource>
                      <directory>${project.build.directory}/docbkx/pdf</directory>
                      <excludes><exclude>**.fo</exclude></excludes>
                    </resource>
                  </resources>
                </configuration>
              </execution>
            </executions>
          </plugin>           
        </plugins>                    
      </build>
    </profile> 
       
    
    <!-- ************************************ -->
    <!-- * Build Custom Binary Distribution * -->
    <!-- ************************************ -->
    <profile>
      <id>build distribution</id>
      <activation>
        <file><exists>src/main/assembly/bin.xml</exists></file>
      </activation>
      <build>
        <plugins>
          
	        <!-- assembly plugin 
	             configuration to create bin and src distributions
	             from conventional places -->
	        <plugin> 
	          <artifactId>maven-assembly-plugin</artifactId>
	          <executions>
	            <execution>
	              <id>uima-distr</id>
	              <goals><goal>single</goal></goals>
	              <phase>integration-test</phase> <!-- after first copies from jar/docbk pkg -->
	              <configuration>
	                <descriptors>
	                  <descriptor>src/main/assembly/bin.xml</descriptor>
	                  <!-- next is replaced with more standard source-release assembly -->
	                  <!-- descriptor>src/main/assembly/src.xml</descriptor -->
	                </descriptors>
	                <finalName>${assemblyFinalName}</finalName>
	                <tarLongFileMode>gnu</tarLongFileMode>
	              </configuration>              
	            </execution>
	          </executions>
	        </plugin>

          <!-- https://issues.apache.org/jira/browse/UIMA-2008 -->
          <!-- no maven deployment of this project's artifacts -->
          <!-- binary build artifact deployed from apache mirror system after release -->
          <plugin>
            <artifactId>maven-deploy-plugin</artifactId>      
            <configuration>
              <skip>true</skip>
            </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>generate checksums for binary artifacts</id>
                <goals><goal>run</goal></goals>
                <phase>verify</phase>
                <configuration>
                  <target>
                    <checksum algorithm="sha1" format="MD5SUM">
                      <fileset dir="${project.build.directory}">
                        <include name="*.zip" />
                        <include name="*.gz" />
                      </fileset>
                    </checksum>
                    <checksum algorithm="md5" format="MD5SUM">
                      <fileset dir="${project.build.directory}">
                        <include name="*.zip" />
                        <include name="*.gz" />
                      </fileset>
                    </checksum>
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
	        
        </plugins>                    
      </build>
    </profile>

    <!-- ************************************ -->
    <!-- *   Build Eclipse Plugin           * -->
    <!-- ************************************ -->
    <profile>
      <id>build eclipse plugins</id>
      <activation>
        <file>
          <exists>marker-file-identifying-eclipse-plugin</exists>
        </file>
      </activation>
      <build>
        <!-- The final name is typically overridden in the individual project
             to follow the Eclipse naming rules.  Rather than just the artifactId,
             Eclipse wants this name to be the same as the Bundle-SymbolicName,
             which typically starts with org.apache.uima, and isn't the same as
             the artifact name.
             examples:
                uimaj-ep-jcasgen    -     org.apache.uima.jcas.jcasgenp
                uimaj-ep-configurator -   org.apache.uima.desceditor     -->
        <finalName>${project.artifactId}_${parsedVersion.osgiVersion}</finalName>         
                
        <!-- resources are "merged" -->
            <!-- needed to copy resources, icons, and the plugin.xml to the result -->
        <resources>
          <resource>
            <directory>.</directory>
            <includes>
              <include>plugin.xml</include>
              <!-- include subdir of icons too, [UIMA-1958] -->
              <include>icons/**/*.*</include>
            </includes>
          </resource>
          <!-- need the following, is not "merged" from the overall maven superPom -->
          <resource>
            <directory>src/main/resources</directory>
          </resource>
        </resources>
     
        <pluginManagement>
          
          <!-- run the felix plugin in manifest mode
               because that plugin doesn't resolve
               all properties e.g., parsedVersion.osgiVersion -->
          <plugins>
            <plugin>
              <groupId>org.apache.felix</groupId>
              <artifactId>maven-bundle-plugin</artifactId>
              <executions>
                <execution>
                  <id>uima-bundle</id>
                  <goals><goal>manifest</goal></goals>
                  <phase>process-classes</phase>
                  <configuration>
                    <!-- we put the generate manifest in the spot where Eclipse 
                         plugins think it will be -->
                   <manifestLocation>META-INF/</manifestLocation>
                  </configuration>
                </execution>
                <!-- turn off unneeded executions --> 
                <execution>
                  <id>default-deploy</id>
                  <phase />
                </execution>
                <execution>
                  <id>default-install</id>
                  <phase />
                </execution>
                <execution>
                  <id>default-bundle</id>
                  <phase />
                </execution>
              </executions>
            </plugin>
    
            <!-- pick up the manifest felix generates -->        
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <configuration>
                <archive>
                  <manifestFile>META-INF/MANIFEST.MF</manifestFile>
                </archive>
              </configuration>       
            </plugin>
    
            <!-- special eclipse:eclipse configuration for Eclipse plugins -->        
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-eclipse-plugin</artifactId>
              <!--  version set in parent-pom-top -->
              <configuration>
                <manifest>.ignore</manifest>
                <pde>true</pde>
                <!-- set next to false because refs to runtime project
                     as a project don't work (because it is a library project,
                     and has no sources of its own 
                  
                  A consequence of this: If you change code a plugin depends on,
                  run "mvn install" on the changed code to get your plugin to
                  pick up the changes 
                  -->
                <useProjectReferences>false</useProjectReferences>
              </configuration>
            </plugin>
                  
          </plugins>
        </pluginManagement> 
        
        <plugins>
        
		      <plugin> 
		        <groupId>org.apache.maven.plugins</groupId>
		        <artifactId>maven-antrun-plugin</artifactId>
		        <executions>		          
              <!-- https://issues.apache.org/jira/browse/UIMA-2967  -->
		          <execution>
                <id>clear-META-INF</id>
                <goals><goal>run</goal></goals>
                <phase>compile</phase>  <!--  before maven-bundle-plugin plugin -->
                <configuration>
                  <target>
                    <delete file="META-INF/MANIFEST.MF" quiet="true" />
                  </target>
                </configuration>
              </execution>
		        </executions>
		      </plugin>
        
        </plugins>   
      </build>
    </profile>
    
    <!-- ************************************ -->
    <!-- *   Build Eclipse Feature          * -->
    <!-- ************************************ -->
    <profile>
      <id>build eclipse features</id>
      <activation>
        <file>
          <exists>marker-file-identifying-eclipse-feature</exists>
        </file>
      </activation>
      <build>
        <finalName>${project.artifactId}_${parsedVersion.osgiVersion}</finalName>
        <!-- turn on filtering for these resources -->         
        <resources>
          <resource>
            <directory>${basedir}</directory>
            <includes>
              <include>feature.properties</include>
              <include>feature.xml</include>
              <include>uima-eclipse-user-agreement.html</include>
            </includes>
            <filtering>true</filtering>
          </resource>
        </resources>

        <!-- The feature.xml is filtered here, rather than in going from the 
             top level place to the Jar, because Eclipse feature manipulation
             uses the top level value.         
         -->
        <plugins>
          <!-- filter the feature.xml to have the right version info 
              for Eclipse at the top level --> 
          <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              <execution>
                <id>filter feature.xml</id>
                <!-- run before process-resources, which uses this result -->
                <phase>generate-resources</phase>
                <goals><goal>copy-resources</goal></goals>
                <configuration>
                  <outputDirectory>${basedir}</outputDirectory>
                  <resources>
                    <resource>
                      <directory>src/main/resources</directory>
                      <includes><include>feature.xml</include></includes>
                      <filtering>true</filtering>
                    </resource>
                  </resources> 
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>    

    <!-- ************************************ -->
    <!-- *   Build Eclipse Update Subsite   * -->
    <!-- ************************************ -->
    <profile>
      <id>build-eclipse-update-subsite</id>
      <activation>
        <file>
          <exists>marker-file-identifying-eclipse-update-site</exists>
        </file>
      </activation>
      <properties>
        <eusWork>${project.build.directory}/eus-work</eusWork>
        <toBePacked>${project.build.directory}/toBePacked</toBePacked>
        <distsvnroot>https://dist.apache.org/</distsvnroot>
<!--         <distsvnroot>file:///svn/t/</distsvnroot>    -->
      </properties>
      <build>
        <plugins>

          <!-- ============================================================================ --> 
          <!--           U s e   o f   d i s t . a p a c h e . o r g    S V N               -->
          <!--                                                                              --> 
          <!--  Goals: avoid copying to /release/, use svn commit to do                     --> 
          <!--           just the changed files                                             -->
          <!--                                                                              -->
          <!--      Safety (abandonded)                                                     --> 
          <!--         for safety, work in the /dev/ area                                   --> 
          <!--         For vote, user can do commit to /dev/ area                           --> 
          <!--         After vote, user does svn switch to /release/ area and commits       --> 
          <!--         Above aproach abandoned, just be careful not to commit before vote   -->
          <!--                                                                              --> 
          <!--  svn (release) -> checkout                                                   --> 
          <!--  srcs -> toBePacked -> eus-work - - - - +-> subsite -> (manual) commit       --> 
          <!--                                    SC         SC                             --> 
          <!--                                                                              --> 
          <!--    SC = sign & checksum                                                      --> 
          <!--         the 2nd SC is for the updated artifacts and contents of the subsite  --> 
          <!-- ============================================================================ --> 
		       
          <!-- ============================================================================ --> 
          <!--                   O v e r a l l    F l o w                                   -->
          <!--                                                                              --> 
          <!--  PROCESS-SOURCES                                                             --> 
          <!--     New plugins to be compressed -> target/toBePacked                        --> 
          <!--                                                                              --> 
          <!--     New features to be included -> target/eus-work                           --> 
          <!--         (eus = Eclipse Update Site)                                          --> 
          <!--                                                                              --> 
          <!--     filter category.xml to pick up version #                                 --> 
          <!--                                                                              --> 
          <!--  PACKAGE                                                                     --> 
          <!--     Pack step goes from target/toBePacked -> target/eus-work                 --> 
          <!--                                                                              --> 
          <!--     Release SVN checkout -> target/eclipse-update-site/[component]           --> 
          <!--           (This is the current site - to be updated)                         --> 
          <!--                                                                              --> 
          <!--     Publish metadata goes from target/eus-work -> eclipse-update-site/[comp] -->
          <!--         (publish run in "append" mode)                                       --> 
		      <!--                                                                              --> 
		      <!--     Category update goes from target/eus-work -> eclipse-update-site/[comp]  --> 
		      <!--                                                                              -->
		      <!--     (if apache-release:                                                      -->
          <!--        do checksums and sign in target/eus-work                              --> 
		      <!--        delete prev checksums and signature for artifacts/content.jar         -->
		      <!--        add new checksum/sign for these two jars                              -->
		      <!--        copy all checksums/signatures from eus-work                           -->
		      <!--     )                                                                        -->
		      <!--                                                                              -->
		      <!-- ============================================================================ --> 
		
          <!-- ============================================================================ -->
          <!--    Alternate flow if apache-release is not defined -                         -->
          <!--      skip getting previous update site from dist.apache.org                  -->
          <!-- ============================================================================ -->
		      		
		      <!-- filter the category.xml to have the right version info 
		           for Eclipse at the top level -->
		      <plugin>
		        <artifactId>maven-resources-plugin</artifactId>
		        <executions>
		          <execution>
		            <id>filter-category.xml</id>
		            <!-- run before package, which uses this result -->
		            <phase>process-sources</phase>
		            <goals><goal>copy-resources</goal></goals>
		            <configuration>
		              <outputDirectory>${basedir}</outputDirectory>
		              <resources>
		                <resource>
		                  <directory>src/main/resources</directory>
		                  <includes><include>category.xml</include></includes>
		                  <filtering>true</filtering>
		                </resource>
		              </resources> 
		            </configuration>
		          </execution>
		        </executions>
		      </plugin>		      
		      
		      <plugin>
		        <artifactId>maven-antrun-plugin</artifactId>
		        <executions>
		        
		          <execution>
		            <id>BuildUpdateSite-clearWorkAreas</id>
		            <phase>initialize</phase>
		            <goals><goal>run</goal></goals>
		            <configuration>
		              <target>
		                <delete dir="${toBePacked}" quiet="true" />
		                <delete dir="${eusWork}" />
		              </target>
		            </configuration>
		          </execution>
		          
		          <execution>
		            <id>BuildUpdateSite-pack-svnget-buildMetadata-commit-to-dev</id>
		            <phase>package</phase>  
		            <goals><goal>run</goal></goals>
		            <configuration>
		              <target>
		                <taskdef name="if" classname="net.sf.antcontrib.logic.IfTask" />
		                
		                <!-- =================================== -->
		                <!--   Check we can access build tools   -->
		                <!-- =================================== -->
		                <!-- if the property uima-maven-build-eclipse-home is set, use it, otherwise don't -->
		                <condition property="eclipse.home" value="${uima-maven-build-eclipse-home}">
		                  <not>
		                    <equals arg1="${uima-maven-build-eclipse-home}" arg2="$${uima-maven-build-eclipse-home}" />
		                  </not>
		                </condition>
		
		                <property environment="envVar" />
		                <condition property="eclipse.home" value="${envVar.ECLIPSE_HOME}">
		                  <isset property="envVar.ECLIPSE_HOME" />
		                </condition>
		
		                <fail unless="eclipse.home" message="********** Please set up and use an ant property eclipse.home set to an Eclipse installation at level 3.3 or later, e.g. c:/eclipses/3.3/eclipse" />
		
		                <fail unless="uima-eclipse-jar-processor" message="********** Please add to your settings.xml file the property uima-eclipse-jar-processor, point to this within an Eclipse installation at level 4.2 or later, e.g. \$\{uima-maven-build-eclipse-home\}/plugins/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110808-1657.jar" />
		
		                <!-- =================================== -->
		                <!-- SVN checkout from release           -->
		                <!--   and checkout to subsite           -->
		                <!-- =================================== -->
		               
		                <if>
		                  <equals arg1="${isApacheRelease}" arg2="true" />
		                  <then>
    
		                    <echo>checking out eclipse update subsite ${eclipseUpdateSiteComponent} from dist ...release...</echo>
		                    <delete dir="${eclipseUpdateSubSite}" quiet="true" />
		                    <exec executable="svn">
		                      <arg value="checkout" />
		                      <arg value="${distsvnroot}repos/dist/release/uima/eclipse-update-site/${eclipseUpdateSiteComponent}" />
		                      <arg value="${eclipseUpdateSubSite}" />
		                    </exec> 
                        
                        <!-- abandon safety for now
                        <echo>switching this checkout to ...dev... for safety</echo>
                        <exec executable="svn">
                          <arg value="switch" />
                          <arg value="- -force" />  remove space between 2 dashes if uncommented
                          <arg value="- -accept" />  remove space between 2 dashes if uncommented
                          <arg value="mine-full" />
                          <arg value="${distsvnroot}repos/dist/dev/uima/eclipse-update-site/${eclipseUpdateSiteComponent}" />
                          <arg value="${eclipseUpdateSubSite}" />
                        </exec> 
                         -->
		                  </then>
		                  <else>
		                    <echo>skipping checkout of current svn dist release (because not apache-release)</echo>
		                    <!-- https://issues.apache.org/jira/browse/UIMA-3501 -->
		                    <delete dir="${eclipseUpdateSubSite}" quiet="true" />
		                  </else>
		                </if>
		                  
		                <echo>Compress plugin Jars using pack200 - this may take a minute or 2</echo>
		                <java jar="${uima-eclipse-jar-processor}" fork="true" failonerror="true" maxmemory="256m">
		                  <arg line="-processAll" />
		                  <arg line="-repack" />
		                  <arg line="-pack" />
		                  <arg line="-verbose" />
		                       <!--  only pack the plugins.  The publisher won't copy packed "features", 
		                             they are tiny anyways --> 
		                  <arg line="-outputDir ${eusWork}/plugins" />
		                  <arg line="${toBePacked}" />
		                </java>
		 
		                <!-- copy also the original unpacked jars to the subsite in the plugins dir -->               
		                <copy todir="${eusWork}/plugins">
		                  <fileset dir="${toBePacked}" />
		                </copy>
		                
		                <!--FAILED EXPERIMENT: COMMENTED OUT
		                       manually publish - eusWork to subsite
		                       rename to follow Eclipse conventions 
		                <echo>Copy jar and jar.pack.gz artifacts to the target subsite</echo>
		                -->
                    <!-- mimic publish action of renaming artifacts from -SNAPSHOT to .SNAPSHOT -->
                    <!-- We do an ANT copy because the publishArtifacts won't copy if the target
                           has an indentically-named artifact (as is often the case during
                           testing, with the artifact ending in -SNAPSHOT) -->
                    <!--  
                    <copy todir="${eclipseUpdateSubSite}">
                      <fileset dir="${eusWork}" />
                      <compositemapper>
                        <globmapper from="*-SNAPSHOT.jar" to="*.SNAPSHOT.jar" />
                        <globmapper from="*-SNAPSHOT.jar.pack.gz" to="*.SNAPSHOT.jar.pack.gz" />
                        <regexpmapper from="^(.(?!-SNAPSHOT))*\.jar(.*)$$" to="\0" />                     
                      </compositemapper>
                    </copy>
                     -->
		                       
		                
		                <echo>Generate the p2 metadata and publish new artifacts</echo>
		                <!-- Append is needed because category info is incremental with each additional release -->
		                <!-- publishArtifacts is needed to generate p2 metadata for the pack.gz forms -->
		                <!--   - tried and failed: using ANT to copy artifacts to the target - doesn't update metadata
		                         for pack.gz form ! if you don't publish artifacts
		                         - doesn't update artifacts.jar 
		                       - deleting SNAPSHOT jars in the eclipse update subsite 
		                         - fails because the previous metadata has info about those jars  
		                           and that isn't deleted, and continues to be used
		                -->
		                <java jar="${eclipse-equinox-launcher}" fork="true" failonerror="true" maxmemory="256m">
		                  <arg line="-application org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher" />
		                  <arg line="-metadataRepository file:///${eclipseUpdateSubSite}" />
		                  <arg line="-artifactRepository file:///${eclipseUpdateSubSite}" />
 		                  <arg line="-source ${eusWork}" />
		                  <arg line="-configs ANY.ANY.ANY" />
		                  <arg line="-publishArtifacts" />
		                  <arg line="-reusePack200Files" />
		                  <arg line="-compress" />
 		                  <arg line="-append" />     
		                </java>
		                
		                <echo>Augment p2 metadata with category information</echo>
		                <java jar="${eclipse-equinox-launcher}" fork="true" failonerror="true" maxmemory="256m">
		                  <arg line="-application org.eclipse.equinox.p2.publisher.CategoryPublisher" />
		                  <arg line="-metadataRepository file:///${eclipseUpdateSubSite}" />
		                  <arg line="-categoryDefinition file:///${basedir}/category.xml" />
		                  <arg line="-categoryQualifier apache-uima" />
		                  <arg line="-compress" />
		                </java>  
		      

                    <!-- ========================================== -->
                    <!--   If apache-release, do checksums and sign -->
                    <!-- ========================================== -->
                    		      
		                <if>
		                  <equals arg1="${isApacheRelease}" arg2="true" />
		                  <then>

		                    <echo message="Generating checksums for new features and plugins" />
		                    <checksum algorithm="sha1" format="MD5SUM">
		                      <fileset dir="${eusWork}">
		                        <include name="**/*.gz" />
		                        <include name="**/*.jar" />
		                      </fileset>
		                    </checksum>
		                    <checksum algorithm="md5" format="MD5SUM">
		                      <fileset dir="${eusWork}">
		                        <include name="**/*.gz" />
		                        <include name="**/*.jar" />
		                      </fileset>
		                    </checksum>
		
		                    <echo message="Generating gpg signatures for new features and plugins" />
		                    <apply executable="gpg" dir="${eusWork}"> 
		                      <arg value="--detach-sign" />
		                      <arg value="--armor" />
		                      <!-- batch flag needed to avoid gpg hang up -->
		                      <arg value="--batch" />
		                      <fileset dir="${eusWork}">
		                        <include name="**/*.jar" />
		                        <include name="**/*.jar.pack.gz" />
		                      </fileset>
		                    </apply> 
		                    
		                    <echo message="Copying the checksums and signatures to the update subsite" />
		                    <copy todir="${eclipseUpdateSubSite}">
		                      <fileset dir="${eusWork}">
		                        <include name="**/*.asc" />
		                        <include name="**/*.md5" />
		                        <include name="**/*.sha1" />
		                      </fileset>
		                    </copy>
		
		                    <echo message="Clearing previous checksums and signatures for update artifacts.jar and content.jar" />
		                    <delete dir="${eclipseUpdateSubSite}">
		                      <include name="*.sha1" />
		                      <include name="*.md5" />
		                      <include name="*.asc" />
		                    </delete> 
		                                      
		                    <echo message="Generating checksums for updated artifacts.jar and content.jar" />
		                    <checksum algorithm="sha1" format="MD5SUM">
		                      <fileset dir="${eclipseUpdateSubSite}">
		                         <include name="*.jar" />
		                      </fileset>
		                    </checksum>
		
		                    <checksum algorithm="md5" format="MD5SUM">
		                      <fileset dir="${eclipseUpdateSubSite}">
		                        <include name="*.jar" />
		                      </fileset>
		                    </checksum>
		
		                    <echo message="Generating gpg signatures for artifacts.jar and content.jar" />
		                    <apply executable="gpg" dir="${eclipseUpdateSubSite}"> 
		                      <arg value="--detach-sign" />
		                      <arg value="--armor" />
		                      <!-- batch flag needed to avoid gpg hang up -->
		                      <arg value="--batch" />
		                      <fileset dir="${eclipseUpdateSubSite}">
		                        <include name="*.jar" />
		                      </fileset>
		                    </apply> 
		
		                  </then>		                  
		                </if>          
		                              
		                
		              </target>
		            </configuration>
		          </execution>
		          
		        </executions>
		      </plugin>
		    </plugins>
      
      </build>
    </profile>

    <!-- **************************************** -->
    <!-- * Build Simple Project Binary Assembly * -->
    <!-- **************************************** -->
    <!-- this profile holds common, factored-out settings for all 
     projects that are packaged as single projects
     (that is, not as multi-module projects), typically Sandbox projects.
     
     It builds, in addition to the standard artifacts and attachments,
     a binary artifact, which includes:
       - The main generated artifact, in the lib/ dir
       - dependent artifacts needed at runtime (not otherwise provided), in the lib/ dir
       - Lic/Not/Readme/releaseNotes from root dir 
       - generated documentation in the docs/ dir
     
     At release time the standard Apache parent builds the 
       - "source-release" artifact, and the
       - "javadocs" artifact
     
     Conventions:
     
       License/Notice for Jar: uses the standard license/notice
       License/Notice for bin: uses the custom files from project top level
       dependencies on other artifacts: 
         Specified as scope runtime or compile causes these to be included in the lib dir
       
    -->    
    <profile>
      <id>build simple project binary assembly</id>
      <activation>
        <file>
          <exists>marker-file-identifying-single-project</exists>
        </file>
      </activation>
      <build>        
        <plugins>

          <!-- ********************************************* -->
          <!-- * Common Build                                -->
          <!-- *   *** FOR addons only ***                   -->
          <!-- ********************************************* -->
          <!-- *   Base Jar is built,                        --> 
          <!-- *     has no dependencies included            -->
          <!-- *     has basic LICENSE/NOTICE files          -->
          <!-- *   Base augmented dir built                  -->
          <!-- *     has Base Jar in lib/                    -->
          <!-- *     has dependencies in lib/                -->
          <!-- *     has other things that go into PEAR      -->
          <!-- *       except the pear install.xml           -->
          <!-- *     has augmented LICENSE/NOTICE files      -->
          <!-- *                                             -->
          <!-- *     This base is reused to make packages:   -->
          <!-- *       PEAR - adds the install.xml           -->
          <!-- *            - actually, the PEAR builder     -->
          <!-- *              will redo the copies, itself   -->
          <!-- *       OSGi - adds the OSGi manifest         -->
          <!-- *            - removes the doc, javadocs      -->
          <!-- *       individual zip/tar                    -->
          <!-- *       addons aggregate binary zip/tar       -->
          <!-- ********************************************* -->

          <plugin>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-javadocs</id>          
                <!-- turn on javadoc build for each module --> 
                <phase>prepare-package</phase>  <!-- before package, in case package needs the result -->
              </execution>
            </executions>           
          </plugin>
              
          <!-- Build  base -->
            <!-- populate the lib dir with all needed dependencies
                 that will be distributed with this component
                 
                 NOTE: TRANSITIVE DEPENDENIES ARE NOT INCLUDED
                       ANYTHING YOU WANT INCLUDED IN THE JAR 
                       PLEASE LIST EXPLICITLY AND MODIFY THE LICENSE/NOTICE
                       APPROPRIATELY
                  
                 Runs during process-resources -->                        
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <!-- Copy the dependencies to the target/base-bin/lib folder -->
              <execution>
                <id>copy dependencies to base-bin/lib</id>
                <goals><goal>copy-dependencies</goal></goals>
                <phase>process-resources</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/base-bin/lib</outputDirectory>
                  <includeScope>runtime</includeScope>
                  <excludeTransitive>true</excludeTransitive>
                </configuration>
              </execution>
            </executions>
          </plugin>
          
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              
              <!-- add directories if they exist -->
              <execution>
                <id>copy standard dirs and files to base-bin</id>
                <goals><goal>copy-resources</goal></goals>
                <phase>process-resources</phase>  <!-- required -->
                <configuration>
                  <outputDirectory>${project.build.directory}/base-bin</outputDirectory>
                  <resources>
                    <resource>
                      <directory>.</directory>
                      <includes>
                        <include>desc/**</include>
                        <include>conf/**</include>
                        <include>data/**</include>
                        <include>doc/**</include>
                        <include>docs/**</include>
                        <include>resources/**</include>
                        <include>bin/**</include>
                        <include>LICENSE*</include>
                        <include>NOTICE*</include>
                        <include>README*</include>
                        <include>readme*</include>
                        <include>RELEASE_NOTES*</include>
                        <include>ReleaseNotes*</include>
                        <include>issuesFixed/**</include> 
                      </includes>
                    </resource>
                    <resource>
                      <directory>src/main/readme</directory>
                    </resource>
                  </resources>
                </configuration>
              </execution>
              
              
              <!-- copy generated Jar to base-bin/lib spot -->
              <execution>
                <id>copy standard target jar to base-bin/lib</id>
                <goals><goal>copy-resources</goal></goals>
                <phase>pre-integration-test</phase>  <!-- a phase after jar -->
                <configuration>
                  <outputDirectory>${project.build.directory}/base-bin/lib</outputDirectory>
                  <resources>
                    <resource>
                      <directory>${project.build.directory}</directory>
                      <includes><include>*.jar</include></includes>
                      <excludes>
                        <exclude>*-sources.jar</exclude>
                        <exclude>*-osgi.jar</exclude>
                      </excludes>     
                    </resource>
                  </resources>
                </configuration>
              </execution>
              
              <!-- copy generated docbook artifacts -->        
              <execution>
                <id>copy generated docbook artifacts to base-bin/doc folder</id>
                <goals><goal>copy-resources</goal></goals>
                <phase>pre-integration-test</phase>  <!-- a phase after docbkx (package) phase -->
                <configuration>
                  <outputDirectory>${project.build.directory}/base-bin/doc</outputDirectory>
                  <resources>
                    <resource>
                      <directory>${project.build.directory}/site/d</directory>
                    </resource>
                  </resources>
                </configuration>
              </execution>          
            </executions>
          </plugin>
                  
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
              <execution>
                <id>binary-release</id> <!-- is "classifier" - match maven convention -->
                <goals><goal>single</goal></goals>
                <phase>integration-test</phase>  <!-- after first copies from jar/docbk pkg -->
                <configuration>
                  <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
                  <descriptorRefs>
                    <descriptorRef>
                      uima-single-project-bin2
                    </descriptorRef>
                  </descriptorRefs>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>org.apache.uima</groupId>
                <artifactId>uima-build-resources</artifactId>
                <version>${uimaBuildResourcesVersion}</version>
              </dependency>
            </dependencies>
          </plugin>    
        </plugins>       
      </build>
    </profile>
        
    <!-- ********************************** -->
    <!-- *   Build OSGi bundle            * -->
    <!-- ********************************** -->     
    <profile>
      <id>build OSGi bundle for annotator</id>
      <activation>
        <file>
          <exists>marker-file-identifying-osgi-project</exists>
        </file>
      </activation>
           
      <build>  
        
        <plugins> 
        
          <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
                            
              <!-- copy the base-bin dir to the osgi dir -->
              <execution>
                <id>Copy base-bin to osgi</id>
                <goals><goal>copy-resources</goal></goals>
                <phase>integration-test</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/osgi</outputDirectory>
                  <resources>
                    <resource>
                      <directory>${project.build.directory}/base-bin</directory>
                      <includes><include>**</include></includes>
                      <excludes>
                        <exclude>doc/**</exclude>
                        <exclude>docs/**</exclude>
                        <exclude>**/*-javadoc.jar</exclude>
                        <exclude>issuesFixed/**</exclude>
                      </excludes>
                    </resource>
                  </resources>
                </configuration>
              </execution>
            </executions>
          </plugin>
          
          <!-- copy any uima dependencies needed to osgi/lib
               beyond what is done for the common build.
               NOTE: can't just add dependencies, because
                 a) local projects override scope to "provided" and
                 b) this would result in the jars being copied for
                    the common build -->
         
          <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <id>Copy uima dependencies to osgi/lib</id>
                <goals><goal>copy</goal></goals>
                <phase>process-resources</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/osgi/lib</outputDirectory>
                  <artifactItems>
                    <artifactItem>
                      <groupId>org.apache.uima</groupId>
                      <artifactId>uimaj-core</artifactId>
                      <version>${uimaDependencyVersion}</version>
                    </artifactItem>
                  </artifactItems>
                </configuration>
              </execution>
            </executions>
          </plugin> 
          
          <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <executions>
              <execution>
                <id>uima-bundle</id>
                <phase>integration-test</phase>
                <goals><goal>manifest</goal></goals>
                <configuration>
                  <buildDirectory>${project.build.directory}/osgi</buildDirectory>
                  <manifestLocation>${project.build.directory}/osgi/META-INF</manifestLocation>
                  <instructions>
                    <Import-Package>org.apache.log.*;resolution:=optional</Import-Package>
                    <Embed-Dependency>*;scope=compile;</Embed-Dependency>
                    <Embed-Directory>lib</Embed-Directory>
                    <Bundle-RequiredExecutionEnvironment>J2SE-1.5</Bundle-RequiredExecutionEnvironment>
                    <Eclipse-ExtensibleAPI>true</Eclipse-ExtensibleAPI>
                    <Bundle-ClassPath>.,lib/${project.build.finalName}.jar,{maven-dependencies},lib/uimaj-core-${uimaDependencyVersion}.jar</Bundle-ClassPath>
                    <Include-Resource>
                      {maven-resources}, {maven-dependencies},
                      lib/uimaj-core-${uimaDependencyVersion}.jar=${settings.localRepository}/org/apache/uima/uimaj-core/${uimaDependencyVersion}/uimaj-core-${uimaDependencyVersion}.jar
                    </Include-Resource>
                    <Bundle-Version>${parsedVersion.osgiVersion}</Bundle-Version>
                    <Bundle-SymbolicName>${project.groupId}.${project.artifactId};singleton:=true</Bundle-SymbolicName>
                  </instructions>
                </configuration>
              </execution>
            </executions>

          </plugin>

          <!-- Run JAR to create OSGi Jar -->          
          <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>Create OSGi Jar</id>
                <goals><goal>jar</goal></goals>
                <phase>integration-test</phase> <!-- after above build step -->
                <configuration>
                  <finalName>${project.groupId}.${project.artifactId}_${parsedVersion.osgiVersion}</finalName>
                  <classifier>osgi</classifier>
                  <classesDirectory>${project.build.directory}/osgi</classesDirectory>
                  <archive>
                    <manifestFile>${project.build.directory}/osgi/META-INF/MANIFEST.MF</manifestFile>
                  </archive>
                </configuration>                
              </execution>
            </executions>
          </plugin>
                             
        </plugins>
      </build>             
    </profile>
 
    <!-- ********************************** -->
    <!-- *   Build Standard PEAR          * -->
    <!-- ********************************** -->
    <profile>
      <id>build standard PEAR</id>
      <activation>
        <file>
          <exists>marker-file-identifying-standard-pear</exists>
        </file>
      </activation>
      <build>  
        
        <plugins>  
                     
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              
              <!-- add the contents of desc if it exists to the jar.  
                   This puts the things like the WhitespaceTokenizer.xml file into the Jar
                   and makes it easier for users to run this, without installing a pear. 
                   The Tagger project uses this technique, for instance -->
              <execution>
                <id>copy desc so its contents can be found in Jar</id>
                <goals><goal>copy-resources</goal></goals>
                <phase>process-resources</phase>  <!-- required -->
                <configuration>
                  <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                  <resources>
                    <resource>
                      <directory>desc</directory>
                      <includes><include>**</include></includes>
                    </resource>
                  </resources>
                </configuration>
              </execution>
                   
              <!-- copy the base-bin dir to the pearPackaging dir -->
              <execution>
                <id>Copy base-bin to pearPackaging</id>
                <goals><goal>copy-resources</goal></goals>
                <phase>integration-test</phase> <!-- after first copies from jar/docbk pkg -->
                <configuration>
                  <outputDirectory>${project.build.directory}/pearPackaging</outputDirectory>
                  <resources>
                    <resource>
                      <directory>${project.build.directory}/base-bin</directory>
                      <includes><include>**</include></includes>
                      <excludes>
                        <exclude>**/*-javadoc.jar</exclude>
                      </excludes>
                    </resource>
                  </resources>
                </configuration>
              </execution>
                                      
            </executions>
          </plugin>
          
          <plugin>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-javadocs</id>          
                <!-- turn on javadoc build for each module --> 
                <phase>package</phase> 
              </execution>
            </executions>           
          </plugin>
          
          <!-- build the PEAR -->
          <plugin>
            <groupId>org.apache.uima</groupId>
            <artifactId>PearPackagingMavenPlugin</artifactId>
            <version>2.4.0</version>
            <extensions>true</extensions>        
            <executions>
              <execution>
                <id>build uima annnotator Pear</id>
                <goals><goal>package</goal></goals>
                   <!-- needs to run after the jar is built
                        after docbooks are packaged and copied to pearPackaging/doc folder -->
                <phase>integration-test</phase>  <!-- after first copies from jar/docbk pkg -->
                <configuration> 
                  <datapath>$main_root/resources</datapath>
                  <componentId>${project.artifactId}</componentId>
                  <mainComponentDesc>${pearMainDescriptor}</mainComponentDesc>
                </configuration>
              </execution>
            </executions>
          </plugin>              

          <!-- Attach PEAR artifact after PEAR is built -->
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-pear-artifact</id>
                <phase>post-integration-test</phase>  
                <goals><goal>attach-artifact</goal></goals>
                <configuration>
                  <artifacts>
                    <artifact>
                      <file>${project.build.directory}/${project.artifactId}.pear</file>
                      <type>pear</type>
                    </artifact>
                  </artifacts>
                </configuration>
              </execution>
            </executions>
          </plugin>
     
        </plugins>
        
      </build>
    </profile>
    
    <profile>
      <id>m2e</id>
      <activation>
        <property>
          <name>m2e.version</name>
        </property>
      </activation>
      <build>
        <pluginManagement>
		      <plugins>
		      
		        <!--This plugin's configuration is used to store Eclipse m2e settings 
		            only. It has no influence on the Maven build itself. -->
		        <plugin>
		          <groupId>org.eclipse.m2e</groupId>
		          <artifactId>lifecycle-mapping</artifactId>
		          <version>1.0.0</version>
		          <configuration>
		            <lifecycleMappingMetadata>
		              <pluginExecutions>
		              
		                <!-- ***************************** -->
		                <!-- IGNORE remote resources       -->
		                <!-- ***************************** -->
		                <pluginExecution>
		                  <pluginExecutionFilter>
		                    <groupId>org.apache.maven.plugins</groupId>
		                    <artifactId>
		                      maven-remote-resources-plugin
		                    </artifactId>
		                    <versionRange>[1,)</versionRange>
		                    <goals>
		                      <goal>process</goal>
		                      <goal>bundle</goal>
		                    </goals>
		                  </pluginExecutionFilter>
		                  <action>
		                    <ignore />
		                  </action>
		                </pluginExecution>
		                
		                <!-- ***************************** -->
		                <!-- EXECUTE parse-date-time       -->
		                <!-- ***************************** -->
		                <pluginExecution>
		                  <pluginExecutionFilter>
		                    <groupId>org.apache.uima</groupId>
		                    <artifactId>
		                      uima-build-helper-maven-plugin
		                    </artifactId>
		                    <versionRange>[2,)</versionRange>
		                    <goals>
		                      <goal>parse-date-time</goal>
		                    </goals>
		                  </pluginExecutionFilter>
		                  <action>
		                    <execute />
		                  </action>
		                </pluginExecution>
		                
		                <!-- ******************************* -->
		                <!-- IGNORE dependency copy / unpack -->
		                <!-- ******************************* -->
		                <pluginExecution>
		                  <pluginExecutionFilter>
		                    <groupId>org.apache.maven.plugins</groupId>
		                    <artifactId>maven-dependency-plugin</artifactId>
		                    <versionRange>[2,)</versionRange>
		                    <goals>
		                      <goal>unpack</goal>
		                      <goal>copy-dependencies</goal>
		                      <goal>unpack-dependencies</goal>
		                    </goals>
		                  </pluginExecutionFilter>
		                  <action>
		                    <ignore />
		                  </action>
		                </pluginExecution>
		                
		                <!-- *********************************************** -->
		                <!-- IGNORE enforcer - to avoid warning message      -->
		                <!-- https://issues.apache.org/jira/browse/UIMA-3053 -->
		                <!-- *********************************************** -->
		                <pluginExecution>
		                  <pluginExecutionFilter>
		                    <groupId>org.apache.maven.plugins</groupId>
		                    <artifactId>maven-enforcer-plugin</artifactId>
		                    <versionRange>[1,)</versionRange>
		                    <goals>
		                      <goal>enforce</goal>
		                    </goals>
		                  </pluginExecutionFilter>
		                  <action>
		                    <ignore />
		                  </action>
		                </pluginExecution>		                
		
		                <!-- ******************************* -->
		                <!-- IGNORE clearing old Manifest.MF -->
		                <!-- at top level, needed by         -->    
		                <!-- maven bundle plugin             -->
		                <!-- ******************************* -->
		                <pluginExecution>
		                  <pluginExecutionFilter>
		                    <groupId>org.apache.maven.plugins</groupId>
		                    <artifactId>maven-antrun-plugin</artifactId>
		                    <versionRange>[1.6,)</versionRange>
		                    <goals>
		                      <goal>run</goal>
		                    </goals>
		                  </pluginExecutionFilter>
		                  <action>
		                    <ignore />
		                  </action>
		                </pluginExecution>

                    <!-- *********************************************** -->
                    <!-- EXECUTE most javacc goals                       -->
                    <!-- *********************************************** -->
                    <pluginExecution>
                      <pluginExecutionFilter>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>javacc-maven-plugin</artifactId>
                        <versionRange>[2,)</versionRange>
                        <goals>
                          <goal>javacc</goal>
                          <goal>jjtree-javacc</goal>
                          <goal>jjtree</goal>
                        </goals>
                      </pluginExecutionFilter>
                      <action>
                        <execute />
                      </action>
                    </pluginExecution>                    

                    <pluginExecution>
                      <pluginExecutionFilter>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>javacc-maven-plugin</artifactId>
                        <versionRange>[2,)</versionRange>
                        <goals>
                          <goal>jjdoc</goal>
                        </goals>
                      </pluginExecutionFilter>
                      <action>
                        <ignore />
                      </action>
                    </pluginExecution>                    
		              </pluginExecutions>
		            </lifecycleMappingMetadata>
		          </configuration>
		        </plugin>
		      </plugins>
		    </pluginManagement>
      </build>
    </profile>      
  </profiles>
 
</project>