<!--
  Copyright 2002,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.
-->

<module name="commons-jelly">


  <description>Commons Jelly</description>
  <url href="http://jakarta.apache.org/commons/sandbox/jelly/"/>

  <cvs repository="jakarta"/>

  <!-- This is really the cvs module. We need to change this but -->
  <!-- I will leave this for now until everything works.         -->

  <project name="commons-jelly">

    <!-- Standard Maven target to produce Javadocs, source -->
    <!-- and binary distributions.                         -->
    <ant buildfile="build.xml" target="jar">
      <property name="maven.final.name" value="commons-jelly-@@DATE@@"/>
    </ant>

    <package>org.apache.commons.jelly</package>

    <!-- All Maven projects need Ant and Xerces to build. -->
    <depend project="jakarta-ant" inherit="runtime"/>
    <depend project="xml-xerces"/>

    <depend project="junit"/>
    <depend project="javadoc"/>
    <depend project="xmlParseAPIs"/>
    <depend project="xercesImpl"/>
    <depend project="ant"/>
    <depend project="ant-optional"/>
    <depend project="commons-logging"/>
    <depend project="commons-beanutils"/>
    <depend project="commons-collections"/>
    <depend project="commons-digester"/>
    <depend project="dom4j"/>
    <depend project="commons-jexl"/>
    <depend project="velocity"/>
    <depend project="jdbc-stdext"/>
    <depend project="werkz"/>
    <depend project="bsh"/>
    <depend project="bsf"/>
    <depend project="ojb"/>
    <depend project="jms"/>
    <depend project="commons-messenger"/>
    <depend project="commons-httpclient"/>
    <depend project="isorelax"/>
    <depend project="msv"/>
    <depend project="xsdlib"/>
    <depend project="relaxngDatatype"/>
    <depend project="hsqldb"/>

    <work nested="target/classes"/>
    <home nested="target"/>
    <jar name="commons-jelly-@@DATE@@.jar"/>
    <javadoc nested="docs/apidocs"/>

    <nag from="Maven Developers &lt;turbine-maven-dev@jakarta.apache.org&gt;"
         to="commons-dev@jakarta.apache.org"/>


  </project>

</module>
