<?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.commons</groupId>
    <artifactId>commons-parent</artifactId>
    <version>33</version>
  </parent>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-functor-parent</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Apache Commons Functor</name>
  <inceptionYear>2003</inceptionYear>
  <description>
    A "functor" is an entity that serves the role of a function but can be operated upon like an object.
    The Apache Commons Functor library defines common functor and functor-related interfaces,
    implementations, and utilities.
  </description>

  <url>http://commons.apache.org/proper/commons-functor/</url>

  <issueManagement>
    <system>jira</system>
    <url>http://issues.apache.org/jira/browse/FUNCTOR</url>
  </issueManagement>

  <scm>
    <connection>scm:git:https://gitbox.apache.org/repos/asf/commons-functor</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/commons-functor</developerConnection>
    <url>https://gitbox.apache.org/repos/asf/commons-functor</url>
  </scm>

  <developers>
    <developer>
      <name>Bruno P. Kinoshita</name>
      <email>kinow AT apache DOT org</email>
    </developer>
    <developer>
      <name>Dennis Lundberg</name>
      <id>dennisl</id>
      <email>dennisl AT apache DOT org</email>
    </developer>
    <developer>
      <name>Matt Benson</name>
      <id>mbenson</id>
      <email>mbenson AT apache DOT org</email>
    </developer>
    <developer>
      <name>Niall Pemberton</name>
      <id>niallp</id>
      <email>niallp AT apache DOT org</email>
    </developer>
    <developer>
      <name>Rodney Waldhoff</name>
      <id>rwaldhoff</id>
      <email>rwaldhoff AT apache DOT org</email>
    </developer>
    <developer>
      <name>Simone Tripodi</name>
      <id>simonetripodi</id>
      <email>simonetripodi AT apache DOT org</email>
    </developer>
  </developers>

  <contributors>
   <contributor>
     <name>Jason Horman</name>
     <email>jason AT jhorman DOT org</email>
   </contributor>
   <contributor>
     <name>Herve Quiroz</name>
     <email>herve DOT quiroz AT esil DOT univ DASH mrs DOT fr</email>
   </contributor>
   <contributor>
     <name>Liviu Tudor</name>
     <email>me AT liviutudor DOT com</email>
   </contributor>
  </contributors>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-functor-api</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <!-- if upgrading, be sure to check shaded jar relocations! -->
        <version>3.1</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.1</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.5</maven.compiler.source>
    <maven.compiler.target>1.5</maven.compiler.target>
    <commons.componentid>functor</commons.componentid>
    <commons.module.name>org.apache.commons.functor</commons.module.name>
    <commons.release.version>1.0</commons.release.version>
    <commons.rc.version>RC1</commons.rc.version>
    <commons.jira.id>FUNCTOR</commons.jira.id>
    <commons.jira.pid>12312520</commons.jira.pid>

    <commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-functor</commons.scmPubUrl>
  </properties>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptors>
            <descriptor>${basedir}/src/main/assembly/bin.xml</descriptor>
            <descriptor>${basedir}/src/main/assembly/src.xml</descriptor>
          </descriptors>
          <tarLongFileMode>gnu</tarLongFileMode>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
          <id>attach-sources</id>
          <goals>
            <goal>jar</goal>
          </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <dependencies>
          <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>commons-functor-build-tools</artifactId>
            <version>${project.version}</version>
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-publish-plugin</artifactId>
        <configuration>
          <content>${project.reporting.outputDirectory}</content>
          <pubScmUrl>scm:svn:${commons.scmPubUrl}</pubScmUrl>
          <checkoutDirectory>site-content</checkoutDirectory>
          <tryUpdate>true</tryUpdate>
        </configuration>
        <executions>
          <execution>
            <id>scm-publish</id>
            <phase>site-deploy</phase><!-- deploy site with maven-scm-publish-plugin -->
            <goals>
              <goal>publish-scm</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>

    <!--
     | Maven3 doesn't handle ssh/scp by default
     | let's take in consideration to add it in the parent pom
    -->
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ssh</artifactId>
        <version>1.0</version>
      </extension>
    </extensions>
  </build>
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <targetJdk>1.5</targetJdk>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-changes-plugin</artifactId>
        <version>2.8</version>
        <inherited>false</inherited>
        <configuration>
          <issueLinkTemplate>%URL%/../%ISSUE%</issueLinkTemplate>
        </configuration>
        <reportSets>
          <reportSet>
            <reports>
              <report>changes-report</report>
              <report>jira-report</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
          <threshold>Normal</threshold>
          <effort>Default</effort>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>3.1.1</version>
        <configuration>
          <configLocation>org/apache/commons/functor/checkstyle.xml</configLocation>
          <headerLocation>org/apache/commons/functor/license-header.txt</headerLocation>
          <suppressionsLocation>org/apache/commons/functor/checkstyle-suppressions.xml</suppressionsLocation>
          <suppressionsFileExpression>org/apache/commons/functor/checkstyle-suppressions.xml</suppressionsFileExpression>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.4</version>
      </plugin>
    </plugins>
  </reporting>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <name>Apache Commons Site</name>
      <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-functor/</url>
    </site>
  </distributionManagement>

  <modules>
    <module>build-tools</module>
    <module>api</module>
    <module>core</module>
  </modules>
</project>
