<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.uima</groupId>
    <artifactId>parent-pom</artifactId>
    <version>13</version>
    <relativePath />
  </parent>

  <artifactId>ruta-parent</artifactId>
  <packaging>pom</packaging>
  <version>2.8.1</version>
  <name>Apache UIMA Ruta: ${project.artifactId}</name>
  <url>${uimaWebsiteUrl}</url>
  <inceptionYear>2011</inceptionYear>
  <description>The common parent pom for the UIMA Ruta</description>
  
  <!-- 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.8.1/ruta-parent</url>
    <connection>scm:svn:http://svn.apache.org/repos/asf/uima/ruta/tags/ruta-2.8.1/ruta-parent</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/uima/ruta/tags/ruta-2.8.1/ruta-parent</developerConnection>
  </scm>

  <!-- The repositories and pluginRepositories section is duplicated from the parent pom one, and adds 
    the Apache Snapshot Nexus repository where UIMA snapshots are deployed. This is needed if for instance, 
    a project depends on some new SNAPSHOT level of a build tool, where the users hasn't checked out the 
    build tooling. This allows maven to find the snapshots when looking for the parent of this pom -->
  <repositories>
    <repository>
      <id>eclipsePlugins</id>
      <name>Eclipse components</name>
      <layout>default</layout>
      <url>https://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>https://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>https://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>https://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>
  
    <properties>
    <uniWueNoticeText>Portions of UIMA Ruta were originally developed by 
the Universität Würzburg.
Copyright (c) 2006, 2011 Universität Würzburg.</uniWueNoticeText>
    <postNoticeText>${uniWueNoticeText}

This product contains icons developed by Mark James 
(http://www.famfamfam.com/lab/icons/silk/), licensed under the 
Creative Commons Attribution 3.0 License.
    </postNoticeText>
    <uimaVersion>2.10.4</uimaVersion>
    <uimafit-version>2.4.0</uimafit-version>
    <spring-version>4.3.22.RELEASE</spring-version>
     <!-- 
     BACKWARD_COMPATIBLE_IMPLEMENTER - patch version (=.=.+)
     BACKWARD_COMPATIBLE_USER        - minor version (=.+.0)
     NON_BACKWARD_COMPATIBLE         - major version (+.0.0)
     -->
     
    <compat.level>NON_BACKWARD_COMPATIBLE</compat.level>
    <compat.previous.version>2.6.0</compat.previous.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
    <api_check_oldVersion>2.6.1</api_check_oldVersion>
  </properties>
  
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
        <version>1.7.24</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.uima</groupId>
          <artifactId>uima-build-helper-maven-plugin</artifactId>
          <version>7</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>${maven.compiler.source}</source>
            <target>${maven.compiler.target}</target>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId> 
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <configuration>
                <source>${maven.compiler.source}</source>
              </configuration> 
            </execution>
          </executions>
          <configuration>
            <source>${maven.compiler.source}</source>
          </configuration>  
        </plugin>
      </plugins>
    </pluginManagement>
  <plugins>
    <plugin>
      <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-versions</id>
            <configuration>
              <rules>
                <requireMavenVersion>
                  <version>3.0</version>
                </requireMavenVersion>
                <requireJavaVersion>
                  <version>${maven.compiler.target}</version>
                </requireJavaVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
    </plugin>
    <plugin>
      <artifactId>maven-resources-plugin</artifactId>
      <executions>
        <execution>
          <id>copy customized bin LICENSE file</id>
          <phase>prepare-package</phase>
          <goals>
            <goal>copy-resources</goal>
          </goals>
          <configuration>
            <outputDirectory>${project.build.directory}/classes/META-INF</outputDirectory>
            <resources>
              <resource>
                <directory>src/main/readme_bin</directory>
                <includes>
                  <include>LICENSE</include>
                  <include>NOTICE</include>
                </includes>
                <filtering>true</filtering>
              </resource>
            </resources>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
  </build>
    <profiles>
    <profile>
      <id>enforce-compatibility</id>
      <activation>
        <file>
          <exists>marker-file-identifying-api-compatibility-check</exists>
        </file>
      </activation>
      <build>
        <!-- https://issues.apache.org/jira/browse/UIMA-5307
        
            <plugin>
              <artifactId>maven-enforcer-plugin</artifactId>
              <dependencies>
                <dependency>
                  <groupId>org.semver</groupId>
                  <artifactId>enforcer-rule</artifactId>
                  <version>0.9.33</version>
                </dependency>
              </dependencies>
              <executions>
                <execution>
                  <id>enforce-compatibility</id>
                  <phase>verify</phase>
                  <goals>
                    <goal>enforce</goal>
                  </goals>
                  <configuration>
                    <rules>
                      <requireBackwardCompatibility implementation="org.semver.enforcer.RequireBackwardCompatibility">
                        <previousVersion>${compat.previous.version}</previousVersion>
                        <dumpDetails>true</dumpDetails>
                        <compatibilityType>${compat.level}</compatibilityType>
                        <excludes>
                          <exclude>**/impl/**/*</exclude>
                          <exclude>**/internal/**/*</exclude>
                          <exclude>org/apache/uima/cas/CASRuntimeException</exclude>
                          <exclude>org/apache/uima/cas/SerialFormat</exclude>
                          <exclude>org/apache/uima/util/CasIOUtils</exclude>
                          <exclude>org/apache/uima/util/CasLoadMode</exclude>
                        </excludes>
                      </requireBackwardCompatibility>
                    </rules>
                  </configuration>
                </execution>
              </executions>
            </plugin>
        -->
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.apache.rat</groupId>
              <artifactId>apache-rat-plugin</artifactId>
              <executions>
                <execution>
                  <id>default-cli</id>
                  <configuration>
                    <excludes combine.children="append">
                      <exclude>**/api-change-report/**/*.*</exclude>&gt;
                    </excludes>
                  </configuration>
                </execution>
            </executions>
            </plugin>
          </plugins>
        </pluginManagement> 
        
        <plugins>
          <!-- https://siom79.github.io/japicmp/MavenPlugin.html -->
          <plugin>              
            <groupId>com.github.siom79.japicmp</groupId>
            <artifactId>japicmp-maven-plugin</artifactId>
            <version>0.13.0</version>
            <configuration>
              <skip>true</skip>
              <oldVersion>
                <dependency>
                  <groupId>${project.groupId}</groupId>
                  <artifactId>${project.artifactId}</artifactId>
                  <version>${api_check_oldVersion}</version>
                </dependency>
              </oldVersion>
              <parameter>
                <onlyModified>true</onlyModified>
                <excludes>
                   <exclude>org.apache.uima.ruta.type</exclude>
                   <exclude>org.apache.uima.ruta.parser.RutaParser</exclude>
                </excludes>
				<!--  filter out classes with impl in their package or class name -->
<!--                 <postAnalysisScript>${project.basedir}/../ruta-parent/src/main/groovy/api-report.groovy</postAnalysisScript>                   -->
              </parameter>
            </configuration>
            <executions>
              <execution>
                <phase>verify</phase>
                <goals>
                  <goal>cmp</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          
          <!-- This copy is to have the api change report included in the source distribution -->
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>copy-API-change-report</id>
                <phase>install</phase>  
<!--                 must follow verify -->
                <goals><goal>run</goal></goals>
                <configuration>
                  <target>
                    <taskdef name="if" classname="net.sf.antcontrib.logic.IfTask" />
                    <if>
                      <available file="${project.build.directory}/japicmp/" />
                      <then>
                        <copy toDir="${basedir}/api-change-report">
                          <fileset dir="${project.build.directory}/japicmp" />
                        </copy>
                      </then>
                    </if>
                  </target>
                </configuration>
              </execution>
            </executions>
            
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
