<?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">
 
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>9</version>
    <relativePath />
  </parent>
 
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.apache.manifoldcf</groupId>
  <artifactId>mcf-parent</artifactId>
  <version>1.0.1</version>

  <name>ManifoldCF</name>
  <packaging>pom</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- dependency versions -->
    <junit.version>4.8.2</junit.version>
    <postgresql.version>9.1-901.jdbc4</postgresql.version>
    <mysql.version>5.1.18</mysql.version>
    <hsqldb.version>2.2.9</hsqldb.version>
    <derby.version>10.8.2.2</derby.version>
    <jetty.version>7.5.4.v20111024</jetty.version>
    <commons-codec.version>1.5</commons-codec.version>
    <commons-io.version>2.0.1</commons-io.version>
    <commons-logging.version>1.1.1</commons-logging.version>
    <commons-collections.version>3.2.1</commons-collections.version>
    <commons-fileupload.version>1.2.2</commons-fileupload.version>
    <commons-httpclient.version>3.1-mcf-1</commons-httpclient.version>
    <commons-el.version>1.0</commons-el.version>
    <commons-lang.version>2.6</commons-lang.version>
    <xalan.version>2.7.1</xalan.version>
    <xerces.version>2.9.1-mcf-1</xerces.version>
    <jtds.version>1.2.4</jtds.version>
    <servlet-api.version>2.5</servlet-api.version>
    <jstl.version>1.2</jstl.version>
    <glassfish.version>2.1.v20091210</glassfish.version>
    <log4j.version>1.2.16</log4j.version>
    <jdbcpool.version>0.99</jdbcpool.version>
    <json.version>20090211</json.version>
    <velocity.version>1.7</velocity.version>
    <slf4j.version>1.6.4</slf4j.version>
  </properties>

  <modules>
    <module>framework</module>
    <module>connectors</module>
    <module>test-materials</module>
    <module>tests</module>
    <module>framework/jetty-runner</module>
  </modules>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.3.1</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
          <fork>true</fork>
          <meminitial>128m</meminitial>
          <maxmem>512m</maxmem>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <version>2.4.1</version>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>postgresql</id>
      <build>
        <defaultGoal>test</defaultGoal>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>**/*PostgresqlTest.java</include>
              </includes>
            </configuration>
            <executions>
              <execution>
                <phase>test</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
