<?xml version="1.0" encoding="UTF-8"?>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. 
  See the NOTICE file distributed with this work for additional information regarding copyright ownership. 
  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not 
  use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
  Unless required by applicable law or agreed to in writing, software distributed under the License is 
  distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  See the License for the specific language governing permissions and limitations under the License. -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.uima</groupId>
    <artifactId>ruta-parent</artifactId>
    <version>2.5.0</version>
    <relativePath>ruta-parent/pom.xml</relativePath>
  </parent>

  <artifactId>ruta</artifactId>
  <packaging>pom</packaging>
  <name>Apache UIMA Ruta: ${project.artifactId}</name>
  <description>The top project for Apache UIMA Ruta</description>
  <url>${uimaWebsiteUrl}</url>
  <properties>
    <jiraVersion>12334815</jiraVersion>
    <!-- 
     <assembly.attach>false</assembly.attach>
     -->
  </properties>

  <!-- override pom setting in the build project. JIRA 5.1 needs different URL -->
  <issueManagement>
    <system>Jira</system>
    <url>https://issues.apache.org/jira/browse/UIMA</url>
  </issueManagement>

  <!-- Special inheritance note even though the <scm> element that follows is exactly the same as those 
    in super poms, it cannot be inherited because there is some special code that computes the connection 
    elements from the chain of parent poms, if this is omitted. Keeping this a bit factored allows cutting/pasting 
    the <scm> element, and just changing the following two properties -->
  <scm>
    <url>http://svn.apache.org/viewvc/uima/ruta/tags/ruta-2.5.0</url>
    <connection>scm:svn:http://svn.apache.org/repos/asf/uima/ruta/tags/ruta-2.5.0</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/uima/ruta/tags/ruta-2.5.0</developerConnection>
  </scm>

  <!-- dependencies used during assembly -->
  <dependencies>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-core</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-core-ext</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-ep-addons</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-ep-caseditor</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-ep-engine</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-ep-ide</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-ep-textruler</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-ep-core-ext</artifactId>
      <version>${project.version}</version>
    </dependency>
	<dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-maven-plugin</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
  
  <modules>
    <module>ruta-parent</module>
    <module>ruta-core</module>
    <module>ruta-core-ext</module>

    <module>ruta-ep-parent</module>
    <module>ruta-ep-engine</module>
    <module>ruta-ep-ide</module>
    <module>ruta-ep-ide-ui</module>
    <module>ruta-ep-caseditor</module>
    <module>ruta-ep-addons</module>
    <module>ruta-ep-textruler</module>
    <module>ruta-ep-core-ext</module>

	  <module>ruta-maven-plugin</module>
    <module>ruta-maven-archetype</module>
	
    <module>ruta-docbook</module>
    <module>ruta-eclipse-feature</module>
    
    <module>example-projects/ruta-ep-example-extensions</module>
    <module>example-projects/ruta-maven-example</module>
  </modules>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <!-- run Release Audit Tool (RAT) -->
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <executions>
            <execution>
              <id>default-cli</id>
              <configuration>
                <excludes>
                  <exclude>target/**</exclude>
                  <exclude>example-projects/**</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>ruta-eclipse-update-site/target/**</exclude>
                  <exclude>ruta-eclipse-update-site/marker-file-identifying-*</exclude>
                  <exclude>ruta-eclipse-update-site/.settings</exclude>
                  <exclude>DEPENDENCIES</exclude>
                  <exclude>**</exclude>
                </excludes>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-changes-plugin</artifactId>
          <version>2.8</version>
          <executions>
            <execution>
              <id>default-cli</id>
              <goals>
                <goal>jira-report</goal>
              </goals>

              <phase>generate-resources</phase>
              <configuration>
                <useJql>true</useJql>
                <fixVersionIds>${jiraVersion}</fixVersionIds>
                <component>Ruta</component>
                <columnNames>Type,Key,Status,Summary</columnNames>
                <resolution>Fixed</resolution>
                <status>Closed,Resolved</status>
                <sortColumnNames>Type, Status, Key</sortColumnNames>
                <outputDirectory>${basedir}/issuesFixed/</outputDirectory>
                <maxEntries>1000</maxEntries>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  <profiles>
            <!-- 
    <profile>
      <id>build distribution</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-deploy-plugin</artifactId>      
            <configuration>
              <skip>false</skip>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
             -->
      
    <profile>
      <id>apache-release</id>
      <build>
        <plugins>
          <!-- Run jira report -->
          <!-- depends on having -DjiraVersion set -->
          <plugin>
            <artifactId>maven-changes-plugin</artifactId>
            <version>2.8</version>
            <executions>
              <execution>
                <id>default-cli</id>
                <configuration>
                  <fixVersionIds>${jiraVersion}</fixVersionIds>
                  <sortColumnNames>Type, Status, Key</sortColumnNames>
                </configuration>
              </execution>
            </executions>
          </plugin>
           <plugin>
		        <artifactId>maven-antrun-plugin</artifactId>
		        <inherited>false</inherited>
		        <executions>
		          <execution>
		            <id>ExtendSourceRelease</id>
		            <phase>package</phase>
		            <configuration>
		              <target>
		                <zip destfile="${project.build.directory}/${project.artifactId}-${project.version}-source-release.zip" update="true">
									    <zipfileset dir="${basedir}/example-projects/ExampleProject/" includes=".project" prefix="${project.artifactId}-${project.version}/example-projects/ExampleProject/" />
									  </zip>
									  <zip destfile="${project.build.directory}/${project.artifactId}-${project.version}-source-release.zip" update="true">
                      <zipfileset dir="${basedir}/example-projects/ExtensionsExample/" includes=".project" prefix="${project.artifactId}-${project.version}/example-projects/ExtensionsExample/" />
                    </zip>
                    <zip destfile="${project.build.directory}/${project.artifactId}-${project.version}-source-release.zip" update="true">
                      <zipfileset dir="${basedir}/example-projects/TextRulerExample/" includes=".project" prefix="${project.artifactId}-${project.version}/example-projects/TextRulerExample/" />
                    </zip>
                    <zip destfile="${project.build.directory}/${project.artifactId}-${project.version}-source-release.zip" update="true">
                      <zipfileset dir="${basedir}/example-projects/GermanNovels/" includes=".project" prefix="${project.artifactId}-${project.version}/example-projects/GermanNovels/" />
                    </zip>
                    <zip destfile="${project.build.directory}/${project.artifactId}-${project.version}-source-release.zip" update="true">
                      <zipfileset dir="${basedir}/example-projects/Misc/" includes=".project" prefix="${project.artifactId}-${project.version}/example-projects/Misc/" />
                    </zip>
		              </target>
		            </configuration>
		            <goals>
		              <goal>run</goal>
		            </goals>
		          </execution>
		        </executions>
		      </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>