<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
     http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <artifactId>apache</artifactId>
    <groupId>org.apache</groupId>
    <version>7</version>
    <relativePath />
  </parent>
  
  <groupId>org.apache.uima</groupId>
  <artifactId>uima-build-resources</artifactId>
  <version>1</version>
  
  <name>UIMA ${project.artifactId}</name>
  <description>This Jar contains resources
    referred to by maven coordinates,
    needed during building
  </description>
 
  <scm>
    <connection>
      scm:svn:http://svn.apache.org/repos/asf/uima/build/tags/uima-build-resources-1-rc4
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/uima/build/tags/uima-build-resources-1-rc4
    </developerConnection>
    <url>
      http://svn.apache.org/viewvc/uima/build/tags/uima-build-resources-1-rc4
    </url>
  </scm>
      
  <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 -->
    <jiraReportForVersion>12315429</jiraReportForVersion>  <!-- for parent-pom-top-7 -->
    <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>
  </properties>

  <build>
    <pluginManagement>
      <plugins>
        
        <!-- assembly plugin 
             Disable running assembly:assembly with
             warning message to use install instead -->
        <plugin> 
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.2</version>
          <executions>
            <execution>
              <id>default-cli</id>
              <configuration>
                <descriptors>
                  <descriptor>do-not-use--mvn-assembly-assembly--instead-use-mvn-install</descriptor>
                </descriptors>
              </configuration>
            </execution>
            <!-- these next insure version 2.2 is used for these executions -->
            <!-- execution><id>source-release-assembly</id></execution>
            <execution><id>uima-distr</id></execution>
            <execution><id>binary-release</id></execution-->
          </executions>
        </plugin>
                
        <!-- set Java 1.5 as the source and target of compilation -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.3.1</version>
          <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.1</version>
        </plugin>
      
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>2.7</version>
          <configuration>
            <source>5</source> <!-- needed to do Enums -->
            <encoding>UTF-8</encoding>
          </configuration>
          <executions>
            <execution>
              <id>attach-javadocs</id>          
              <goals>
                <goal>jar</goal>
              </goals>
              <configuration>
                <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>
            </execution>
          </executions>          
        </plugin>
        
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.3.1</version>
          <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.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <version>0.6</version>
          <executions>
            <execution>
              <id>default-cli</id>
              <goals><goal>check</goal></goals>
              <phase>verify</phase>
            </execution>
          </executions>
        </plugin>
        
        <!-- set release-plugin version to > than 2.0,
             needed for "flat" hierarchy support -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.1</version>         
          <configuration>
            <useReleaseProfile>false</useReleaseProfile>
            <goals>deploy</goals>
            <arguments>-Papache-release</arguments>
          </configuration>
        </plugin>
        
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>2.4.3</version>
        </plugin>
        
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>2.1.2</version>  
        </plugin>
        
        <!-- generate the issuesFixed report of Jiras fixed in this release -->
        <!-- uses the property "jiraVersion" to select the version -->
        <!-- run 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.3</version>
          
          <configuration>
            <fixVersionIds>${jiraVersion}</fixVersionIds>
            <columnNames>Type,Key,Summary</columnNames>
            <resolutionIds>Fixed</resolutionIds>
            <statusIds>Closed</statusIds>
            <sortColumnNames>Type, Key</sortColumnNames>
            <outputDirectory>${basedir}/issuesFixed/</outputDirectory>
            <maxEntries>1000</maxEntries> <!-- hopefully, bigger than ever needed -->
          </configuration>
        </plugin>      
                     
      </plugins>
    </pluginManagement>
    
    <plugins>
                
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-remote-resources-plugin</artifactId>
        <executions>      
          <execution>
            <goals><goal>bundle</goal></goals>
          </execution>
        </executions>
      </plugin>
                  
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <executions>
          <execution>
            <id>default-cli</id>
            <configuration>
              <excludes>
                <exclude>release.properties</exclude>
                <exclude>README*</exclude>
                <exclude>RELEASE_NOTES*</exclude>
                <exclude>issuesFixed/**</exclude>
                <exclude>src/main/resources/docbook-shared/titlepage/*.xsl</exclude>
                <exclude>marker-file-identifying-*</exclude>
                <exclude>release.properties</exclude> <!-- release generated artifact -->
                <exclude>DEPENDENCIES</exclude> <!-- generated artifact -->
              </excludes>
            </configuration>
          </execution>
        </executions>
      </plugin>
          
    </plugins>     
    
  </build>

</project>