<?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>
  <extend>${basedir}/../project.xml</extend>
  <id>fulcrum-yaafi-c4presolver</id>
  <name>Fulcrum's YAAFI Properties Resolver for Commons Configuration</name>

  <dependencies>
    <dependency>
      <groupId>fulcrum</groupId>
      <artifactId>fulcrum-yaafi</artifactId>
      <version>${pom.currentVersion}</version>
      <url>http://turbine.apache.org/fulcrum/yaafi/</url>
    </dependency>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.2</version>
      <url>http://commons.apache.org/collections/</url>
    </dependency>
    <dependency>
      <groupId>commons-configuration</groupId>
      <artifactId>commons-configuration</artifactId>
      <version>1.4</version>
      <url>http://commons.apache.org/configuration/</url>
    </dependency>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.3</version>
      <url>http://commons.apache.org/lang/</url>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1</version>
      <url>http://commons.apache.org/logging/</url>
    </dependency>
  </dependencies>

  <build>
    <sourceDirectory>${basedir}/java</sourceDirectory>
    <unitTestSourceDirectory>${basedir}/test</unitTestSourceDirectory>
    <unitTest>
      <includes>
        <include>**/*Test.java</include>
      </includes>
    </unitTest>
  </build>

</project>

