<?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>6</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-6-rc1
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/uima/build/tags/parent-pom-6-rc1
    </developerConnection>
    <url>
      http://svn.apache.org/viewvc/uima/build/tags/parent-pom-6-rc1
    </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>12324673</jiraVersion>  <!-- for parent-pom-5 change for each release -->
    <uimaBuildResourcesVersion>6-SNAPSHOT</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>
          <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>
        
        <!-- 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 
                   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>
          <dependencies>
            <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>
            </dependency>
            <!-- next two enable <containsregexp> form for filesets -->
            <dependency>
              <groupId>ant</groupId>
              <artifactId>ant-apache-regexp</artifactId>
              <version>1.6.5</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>
          <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 -->
                </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.8</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>4</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>
      
    </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>
        <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>
          </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>          
          
        </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:4</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>4</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>1</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>
        <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> <!-- 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>
		          
              <!-- 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                                             --> 
          <!--         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       --> 
          <!--                                                                              --> 
          <!--  svn (release) -> svn (dev) -> 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                 --> 
          <!--                                                                              --> 
          <!--     svn del in .../dev/... the eclipse-update-site/[componnt]                --> 
          <!--     svn copy from .../release/ to dev the [component]                        --> 
          <!--     Dev 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 remote copy from release to dev -->
		                <!--   and checkout to subsite           -->
		                <!-- =================================== -->
		                <if>
		                  <isset property="apacheRelease" />
		                  <then>
		                    <echo>copying svn dist release to dev for eclipse update subsite ${eclipseUpdateSiteComponent}</echo>
		                    <exec executable="svn">
		                      <arg value="delete" />
		                      <arg value="${distsvnroot}repos/dist/dev/uima/eclipse-update-site/${eclipseUpdateSiteComponent}" />
		                      <arg value="--force" /> 
		                      <arg value="-m" />
		                      <arg value="prepare for building eclipse update site component ${eclipseUpdateSiteComponent}" />
		                    </exec> 
		    
		                    <exec executable="svn">
		                      <arg value="copy" />
		                      <arg value="${distsvnroot}repos/dist/release/uima/eclipse-update-site/${eclipseUpdateSiteComponent}" />
		                      <arg value="${distsvnroot}repos/dist/dev/uima/eclipse-update-site/" />
		                      <arg value="-m" />
		                      <arg value="prepare for building eclipse update site component ${eclipseUpdateSiteComponent}" />
		                    </exec> 
		    
		                    <echo>checking out eclipse update subsite ${eclipseUpdateSiteComponent} from dist ...dev...</echo>
		                    <delete dir="${eclipseUpdateSubSite}" />
		                    <exec executable="svn">
		                      <arg value="checkout" />
		                      <arg value="--quiet" />
		                      <arg value="${distsvnroot}repos/dist/dev/uima/eclipse-update-site/${eclipseUpdateSiteComponent}" />
		                      <arg value="${eclipseUpdateSubSite}" />
		                    </exec> 
		                  </then>
		                  <else>
		                    <echo>skipping (because not apache-release) copying svn dist release to dev for eclipse update subsite ${eclipseUpdateSiteComponent}</echo>
		                  </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>
		                
		                <echo>Generate p2 metadata</echo>
		                <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>Generate 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> 
		                    
		                    <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>package</phase> 
              </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>
		              </pluginExecutions>
		            </lifecycleMappingMetadata>
		          </configuration>
		        </plugin>
		      </plugins>
		    </pluginManagement>
      </build>
    </profile>      
  </profiles>
 
  <!--  Was used for v 5, not normally needed       
  <modules>
    <module>../uima-build-resources</module>
  	<module>../uima-build-helper-maven-plugin</module>
  </modules>
  -->
</project>