<?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-osworkflow</id>
  <name>Fulcrum OSWorkflow Component</name>
  <currentVersion>1.0.1</currentVersion>
  <versions>
    <version>
      <id>1.0.1</id>
      <name>1.0.1</name>
      <tag>FULCRUM_OSWORKFLOW_1_0_1</tag>
    </version>
  </versions>
  <contributors>
    <contributor>
      <name>Youngho Cho</name>
      <email>youngho@nannet.co.kr</email>
    </contributor>
  </contributors>

  <dependencies>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.0.4</version>
    </dependency>
    <dependency>
      <groupId>opensymphony</groupId>
      <artifactId>osworkflow</artifactId>
      <version>2.7.0</version>
    </dependency>
    <dependency>
      <groupId>opensymphony</groupId>
      <artifactId>oscore</artifactId>
      <version>2.2.4</version>
    </dependency>
    <dependency>
      <groupId>opensymphony</groupId>
      <artifactId>propertyset</artifactId>
      <version>1.3</version>
    </dependency>
    <!-- Only needed for testing -->
    <!--dependency>
      <groupId>opensymphony</groupId>
      <artifactId>osuser</artifactId>
      <version>1.0-dev</version>
    </dependency-->
	<dependency>
	    <groupId>javax.activation</groupId>
	    <artifactId>activation</artifactId>
	    <version>1.1.1</version>
	</dependency>
    <dependency>
      <groupId>bsh</groupId>
      <artifactId>bsh</artifactId>
      <version>1.2b7</version>
    </dependency>

    <dependency>
      <groupId>bsf</groupId>
      <artifactId>bsf</artifactId>
      <version>2.3.0</version>
    </dependency>

    <!--  Needed only for testing -->
    <dependency>
      <groupId>fulcrum</groupId>
      <artifactId>fulcrum-testcontainer</artifactId>
      <version>1.0.8-SNAPSHOT</version>
    </dependency>

    <dependency>
      <groupId>fulcrum</groupId>
      <artifactId>fulcrum-yaafi</artifactId>
      <version>1.0.8-SNAPSHOT</version>
    </dependency>


  </dependencies>

  <build>
    <unitTest>
     <resources>
        <resource>
          <directory>${basedir}/src/test</directory>
          <includes>
            <include>*.xml</include>
          </includes>
        </resource>
      </resources>
    </unitTest>
  </build>

</project>

