<?xml version="1.0" encoding="UTF-8"?>
<project>
<!-- 
/*
 * Copyright 2001-2005 The Apache Software Foundation.
 * 
 * Licensed 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.
 */
 -->


  <!--<extend>build/project.xml</extend>-->
  
  <organization>
    <name>The Apache Software Foundation</name>
    <url>http://www.apache.org/</url>
    <logo>http://www.apache.org/images/asf-logo.gif</logo>
  </organization>
  <logo>http://struts.apache.org/images/struts.gif</logo>

  <groupId>struts</groupId>
  <artifactId>struts-flow</artifactId>
  <name>Struts Flow</name>
  <currentVersion>0.5-SNAPSHOT</currentVersion>
  
  <inceptionYear>2004</inceptionYear>
  <package>org.apache.struts.flow</package>

  <shortDescription>Struts Flow</shortDescription>

  <description>
    Struts Flow is a port of Cocoon's Control Flow to Struts to allow complex 
    workflow, like multi-form wizards, to be easily implemented using 
    continuations-capable JavaScript. It provides the ability to describe the
    order of Web pages that have to be sent to the client, at any given 
    point in time in an application.
  </description>
  
  <siteAddress>people.apache.org</siteAddress>
  <siteDirectory>/www/struts.apache.org/struts-flow/</siteDirectory>

  <repository>
    <connection>scm|svn|http|//svn.apache.org/repos/asf/struts/flow/trunk</connection>
    <developerConnection>scm|svn|https|//svn.apache.org/repos/asf/struts/flow/trunk</developerConnection>
    <url>http://svn.apache.org/repos/asf/struts/flow/trunk</url>
  </repository>
  
  <developers>
    <developer>
      <name>Don Brown</name>
      <id>mrdon</id>
      <email>mrdon at apache.org</email>
      <organization></organization>
    </developer>
  </developers>

  <dependencies>
  
	<dependency>
	  <groupId>struts</groupId>
	  <artifactId>struts-action</artifactId>
	  <version>1.3.0-31122005</version>
	  <properties>
		<war.bundle>true</war.bundle>
	  </properties>
      <url>http://struts.apache.org/</url>
	</dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.3</version>
      <url>http://java.sun.com/products/servlet/</url>
      <properties>
        <scope>provided</scope>
      </properties>
    </dependency>
   
    <dependency>
      <groupId>portlet-api</groupId>
      <artifactId>portlet-api</artifactId>
      <version>1.0</version>
      <properties>
        <scope>provided</scope>
      </properties>
    </dependency>
    
	<dependency>
	  <groupId>rhino</groupId>
	  <artifactId>js</artifactId>
	  <version>1.6R2</version>
	  <properties>
		<war.bundle>true</war.bundle>
	  </properties>
      <url>http://www.mozilla.org/rhino/</url>
	</dependency>

    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.1</version>
      <url>http://jakarta.apache.org/commons/lang/</url>
      <properties>
        <war.bundle>true</war.bundle>
      </properties>
    </dependency>
    
    <dependency>
      <groupId>commons-beanutils</groupId>
      <artifactId>commons-beanutils</artifactId>
      <version>1.7.0</version>
      <url>http://jakarta.apache.org/commons/beanutils/</url>
      <properties>
        <war.bundle>true</war.bundle>
      </properties>
    </dependency>
   
    <dependency>
	  <groupId>commons-chain</groupId>
	  <artifactId>commons-chain</artifactId>
	  <version>1.0</version>
	  <properties>
		<war.bundle>true</war.bundle>
	  </properties>
      <url>http://jakarta.apache.org/commons/chain/</url>
	</dependency>

   <dependency>
      <groupId>commons-digester</groupId>
      <artifactId>commons-digester</artifactId>
      <version>1.6</version>
      <url>http://jakarta.apache.org/commons/digester/</url>
      <properties>
        <war.bundle>true</war.bundle>
      </properties>
    </dependency>
 
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.0.3</version>
      <url>http://jakarta.apache.org/commons/logging/</url>
      <properties>
        <war.bundle>true</war.bundle>
      </properties>
   </dependency>

    <dependency>
      <groupId>commons-validator</groupId>
      <artifactId>commons-validator</artifactId>
      <version>1.1.3</version>
      <url>http://jakarta.apache.org/commons/validator/</url>
      <properties>
        <war.bundle>true</war.bundle>
      </properties>
    </dependency>
    
     <dependency>
      <groupId>oro</groupId>
      <artifactId>oro</artifactId>
      <version>2.0.7</version>
      <url>http://jakarta.apache.org/oro/</url>
      <properties>
        <war.bundle>true</war.bundle>
      </properties>
    </dependency>

 
	<dependency>
	  <groupId>xdoclet</groupId>
	  <artifactId>xjavadoc</artifactId>
	  <version>1.0.3</version>
	  <properties>
		<war.bundle>true</war.bundle>
	  </properties>
      <url>http://xdoclet.sourceforge.net/xjavadoc/</url>
	</dependency>

	<dependency>
	  <groupId>com.ibatis</groupId>
	  <artifactId>ibatis2-common</artifactId>
	  <version>2.1.5.582</version>
	  <properties>
		<war.bundle>true</war.bundle>
	  </properties>
      <url>http://ibatis.apache.org/</url>
	</dependency>
  
  <dependency>
	  <groupId>com.ibatis</groupId>
	  <artifactId>ibatis2-sqlmap</artifactId>
	  <version>2.1.5.582</version>
	  <properties>
		<war.bundle>true</war.bundle>
	  </properties>
      <url>http://ibatis.apache.org/</url>
	</dependency>
 
  </dependencies>
  
  <build>
  
    <nagEmailAddress>struts-dev@struts.apache.org</nagEmailAddress>
    <sourceDirectory>src/java</sourceDirectory>
    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
    
    <unitTest>
      <includes>
        <include>**/Test*.java</include>
      </includes>
      <resources>
        <resource>
          <directory>${basedir}/src/test</directory>
          <includes>
            <include>**/*.xml</include>
            <include>**/*.properties</include>
            <include>**/*.conf</include>
          </includes>
        </resource>
      </resources>
    </unitTest>

    <!-- J A R  R E S O U R C E S -->
    <!-- Resources that are packaged up inside the JAR file -->
    <resources>
      <resource>
        <directory>${basedir}/src/java</directory>
        <includes>
          <include>**/*.template</include>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
      </resource>
      <resource>
        <directory>${basedir}</directory>
        <targetPath>META-INF</targetPath>
        <includes>
          <include>NOTICE.txt</include>
        </includes>
      </resource>
    </resources>
  </build>

  <reports>
  	<!-- flow specific reports here -->
   
    <report>maven-checkstyle-plugin</report>
    <report>maven-changelog-plugin</report>
    <report>maven-changes-plugin</report>
    <report>maven-developer-activity-plugin</report>
    <report>maven-faq-plugin</report>
    <report>maven-file-activity-plugin</report>
    <report>maven-javadoc-plugin</report>
    <report>maven-jdepend-plugin</report>
    <report>maven-junit-report-plugin</report>
    <report>maven-jxr-plugin</report>
	 <!--report>maven-linkcheck-plugin</report-->
    <report>maven-pmd-plugin</report>
    <report>maven-simian-plugin</report>
    <report>maven-tasklist-plugin</report>
    <report>maven-jcoverage-plugin</report>
    <!--report>maven-findbugs-plugin</report-->
  	
  </reports>
</project>
