<?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</id>
  <name>Fulcrum's YAAFI</name>
  <currentVersion>1.0.5</currentVersion>
  <versions>
    <version>
      <id>1.0.5</id>
      <name>1.0.5</name>
      <tag>FULCRUM_YAAFI_1_0_5</tag>
    </version>
    <version>
      <id>1.0.4</id>
      <name>1.0.4</name>
      <tag>FULCRUM_YAAFI_1_0_4</tag>
    </version>
    <version>
      <id>1.0.3</id>
      <name>1.0.3</name>
      <tag>FULCRUM_YAAFI_1_0_3</tag>
    </version>
  </versions>

  <dependencies>
   <!-- run time dependency on decryption of transparent configuration files -->
   <dependency>
      <groupId>fulcrum</groupId>
      <artifactId>fulcrum-yaafi-crypto</artifactId>
      <version>1.0.6-dev</version>
      <url>http://turbine.apache.org/fulcrum/yaafi-crypto</url>
      <properties>
        <war.bundle>true</war.bundle>
        <ear.bundle>true</ear.bundle>
      </properties>
    </dependency>
  <!-- compile time dependency on JAMon for interceptors -->
   <dependency>
      <groupId>com.jamonapi</groupId>
      <artifactId>jamon</artifactId>
      <version>2.0</version>
      <url>http://jamonapi.sourceforge.net/</url>
      <properties>
        <war.bundle>true</war.bundle>
        <ear.bundle>true</ear.bundle>
      </properties>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>${basedir}/src/java</directory>
        <includes>
          <include>**/*.xinfo</include>
        </includes>
      </resource>
    </resources>
    <unitTest>
      <includes>
        <include>**/*Test.java</include>
      </includes>
      <excludes>
        <exclude>**/BaseUnitTest.java</exclude>
      </excludes>
    </unitTest>
  </build>

</project>

