<?xml version="1.0"?>
<!--
   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>30</version>
  </parent>

  <groupId>org.apache.commons</groupId>
  <artifactId>commons-chain-parent</artifactId>
  <version>2.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Apache Commons Chain :: Parent</name>
  <description>
    An implementation of the GoF Chain of Responsibility pattern
  </description>
  <url>http://commons.apache.org/proper/commons-chain/</url>
  <inceptionYear>2003</inceptionYear>

  <modules>
    <module>build-tools</module>
    <module>api</module>
    <module>core</module>
    <module>configuration/api</module>
    <module>configuration/xml</module>
    <module>web</module>
    <module>apps</module>
    <module>dist</module>
  </modules>

  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/commons/proper/chain/trunk/</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/commons/proper/chain/trunk/</developerConnection>
    <url>http://svn.apache.org/viewvc/commons/proper/chain/trunk/</url>
  </scm>
  <issueManagement>
    <system>jira</system>
    <url>http://issues.apache.org/jira/browse/CHAIN</url>
  </issueManagement>
  <distributionManagement>
    <!-- Cannot define in parent ATM, see COMMONSSITE-26 -->
    <site>
      <id>people.apache.org</id>
      <name>Apache Commons Site</name>
      <url>${commons.deployment.protocol}://people.apache.org/www/commons.apache.org/chain</url>
    </site>
  </distributionManagement>

  <developers>
    <developer>
      <name>Craig McClanahan</name>
      <id>craigmcc</id>
      <email>craigmcc at apache.org</email>
    </developer>
    <developer>
      <name>Martin Cooper</name>
      <id>martinc</id>
      <email>martinc at apache.org</email>
    </developer>
    <developer>
      <name>Don Brown</name>
      <id>mrdon</id>
      <email>mrdon at apache.org</email>
    </developer>
    <developer>
      <name>James Mitchell</name>
      <id>jmitchell</id>
      <email>jmitchell at apache.org</email>
    </developer>
    <developer>
      <name>Joe Germuska</name>
      <id>germuska</id>
      <email>germuska at apache.org</email>
    </developer>
    <developer>
      <name>Niall Pemberton</name>
      <id>niallp</id>
      <email>niallp at apache.org</email>
    </developer>
    <developer>
      <name>Simone Tripodi</name>
      <id>simonetripodi</id>
      <email>simonetripodi at apache dot org</email>
    </developer>
    <developer>
      <id>elijah</id>
      <name>Elijah Zupancic</name>
      <email>elijah at zupancic dot name</email>
    </developer>
    <developer>
      <id>britter</id>
      <name>Benedikt Ritter</name>
      <email>britter at apache dot org</email>
    </developer>
  </developers>

  <contributors>
    <contributor>
      <name>Matthew J. Sgarlata</name>
    </contributor>
    <contributor>
      <name>Sean Schofield</name>
      <email>schof at apache dot org</email>
    </contributor>
    <contributor>
      <name>Ted Husted</name>
      <email>husted at apache.org</email>
    </contributor>
  </contributors>

  <properties>
    <maven.compile.source>1.6</maven.compile.source>
    <maven.compile.target>1.6</maven.compile.target>
    <commons.componentid>chain</commons.componentid>
    <commons.release.version>2.0</commons.release.version>
    <commons.release.desc>(minium JDK 1.5)</commons.release.desc>
    <commons.rc.version>RC1</commons.rc.version>
    <commons.jira.id>CHAIN</commons.jira.id>
    <commons.jira.pid>12310462</commons.jira.pid>
    <commons.osgi.import>!javax.portlet,*</commons.osgi.import>
    <commons.osgi.dynamicImport>javax.portlet</commons.osgi.dynamicImport>

    <commons.surefire-report.aggregate>true</commons.surefire-report.aggregate>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
      </dependency>

      <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>commons-digester3</artifactId>
        <version>3.2</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-publish-plugin</artifactId>
          <configuration>
            <ignorePathsToDelete>
              <ignorePathToDelete>javadocs**</ignorePathToDelete>
            </ignorePathsToDelete>
          </configuration>
        </plugin>
        <!--
         | 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>
                <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>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <aggregate>true</aggregate>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>2.9.1</version>
        <dependencies>
          <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-chain2-build-tools</artifactId>
            <version>${project.version}</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <goals>
              <goal>checkstyle-aggregate</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-changes-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <xmlPath>${basedir}/src/changes/changes.xml</xmlPath>
          <issueLinkTemplate>%URL%/%ISSUE%</issueLinkTemplate>
        </configuration>
        <reportSets>
          <reportSet>
            <reports>
              <report>changes-report</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>2.9.1</version>
        <configuration>
          <configLocation>build-tools/src/main/resources/org/apache/commons/chain2/checkstyle.xml</configLocation>
          <enableRulesSummary>false</enableRulesSummary>
          <headerLocation>org/apache/commons/chain2/license-header.txt</headerLocation>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <aggregate>true</aggregate>
          <linksource>true</linksource>
          <links>
            <link>http://download.oracle.com/javase/1.5.0/docs/api/</link>
            <link>http://download.oracle.com/javaee/1.5/api/</link>
            <link>http://commons.apache.org/digester/apidocs/</link>
          </links>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <configuration>
          <threshold>Normal</threshold>
          <effort>Default</effort>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>2.4.0</version>
        <configuration>
          <threshold>Normal</threshold>
          <effort>Default</effort>
        </configuration>
      </plugin>
    </plugins>
  </reporting>

  <profiles>
    <profile>
      <id>rc</id>
      <distributionManagement>
        <!-- Cannot define in parent ATM, see COMMONSSITE-26 -->
        <site>
          <id>apache.website</id>
          <name>Apache Commons Release Candidate Staging Site</name>
          <url>${commons.deployment.protocol}://people.apache.org/www/people.apache.org/builds/commons/${commons.componentid}/${commons.release.version}/${commons.rc.version}/site</url>
        </site>
      </distributionManagement>
    </profile>
  </profiles>

</project>
