<?xml version="1.0" encoding="UTF-8"?>
<project>
<!-- 
/*
 * Copyright 2001-2004 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>
  <artifactId>struts-sandbox</artifactId>
  <name>Struts Sandbox</name>

  <package>org.apache.struts</package>

  <repository>
    <connection>scm|svn|http|//svn.apache.org/repos/asf/struts/sandbox/trunk</connection>
    <developerConnection>scm|svn|https|//svn.apache.org/repos/asf/struts/sandbox/trunk</developerConnection>
    <url>http://svn.apache.org/repos/asf/struts/sandbox/trunk</url>
  </repository>

    <dependencies>
    
      <dependency>
        <groupId>xml-apis</groupId>
        <artifactId>xml-apis</artifactId>
        <version>2.0.2</version>
        <url>http://xml.apache.org/commons/</url>
        <properties>
        	<war.bundle>true</war.bundle>
        </properties>
      </dependency>

      <dependency>
        <groupId>cactus</groupId>
        <artifactId>cactus</artifactId>
        <version>12-1.4.1</version>
        <url>http://jakarta.apache.org/cactus</url>
      </dependency>
      
      <dependency>
        <groupId>cactus</groupId>
        <artifactId>cactus-ant</artifactId>
        <version>1.4.1</version>
        <url>http://jakarta.apache.org/cactus</url>
      </dependency>

    </dependencies>

  <build>

    <!-- Unit test classes -->
    <unitTest>
      <includes>
        <include>**/Test*.java</include>
      </includes>
    </unitTest>

    <resources>
      <includes>
        <include>**/*.properties</include>
      </includes>
    </resources>
    
  </build>

</project>
