<?xml version="1.0"?>
<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>../project.xml</extend>
  <artifactId>struts-resources-plugin</artifactId>

  <name>Struts Resources Plugin</name>
  
  <package>org.apache.struts.plugins.resources</package>
  
    <!-- ################################################################ -->
    <!--        Project management section                                -->
    <!-- ################################################################ -->

  
  <shortDescription>
  	Plugin for providing MessageResources via commons-resources.
  </shortDescription>
  
  <description>
    The Resources plugin allows any Struts-based web application (Struts version 1.1 and higher)
    to integrate their existing app with 
    commons-resources (http://jakarta.apache.org/commons/resources/).

  </description>
  <repository>
    <connection>scm|svn|http|//svn.apache.org/repos/asf/struts/plugins/trunk/resources</connection>
    <developerConnection>scm|svn|https|//svn.apache.org/repos/asf/struts/plugins/trunk/resources</developerConnection>
    <url>http://svn.apache.org/repos/asf/struts/plugins/trunk/resources</url>
  </repository>
  
  <versions />

  <developers/>

  <dependencies>

    <dependency>
       <groupId>struts</groupId>
       <artifactId>struts-action</artifactId>
       <version>1.3.0-dev</version>
       <properties>
       	 <war.bundle>true</war.bundle>
         <cactus.bundle>true</cactus.bundle>
       </properties>
      <url>http://struts.apache.org/</url>
    </dependency>

    <dependency>
      <groupId>commons-resources</groupId>
      <artifactId>commons-resources</artifactId>
      <version>1.0-dev</version>
      <url>http://jakarta.apache.org/commons/resources/</url>
      <properties>
        <war.bundle>true</war.bundle>
      </properties>
    </dependency>
    
  </dependencies>

</project>
