<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<project>
  <extend>${basedir}/../tag-project.xml</extend>
  <id>commons-jelly-tags-define</id>
  <name>commons-jelly-tags-define</name>
  <currentVersion>1.0</currentVersion>

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

  <description>
       The Jelly Define Tag Library
  </description>
  <shortDescription>Commons Jelly Define Tag Library</shortDescription>
  
  <versions>
    <version>
      <id>1.0</id>
      <name>1.0</name>
      <tag>COMMONS_JELLY_DEFINE-1_0</tag>
    </version>
  </versions>

  <dependencies>

    <!-- START for test -->
  
    <dependency>
      <groupId>commons-jelly</groupId>
      <artifactId>commons-jelly-tags-dynabean</artifactId>
      <version>1.0</version>
      <url>http://jakarta.apache.org/commons/jelly/tags/dynabean/</url>
    </dependency>

    <dependency>
      <groupId>commons-jelly</groupId>
      <artifactId>commons-jelly-tags-junit</artifactId>
      <version>1.0</version>
      <url>http://jakarta.apache.org/commons/jelly/tags/junit/</url>
    </dependency>

    <dependency>
      <groupId>commons-jelly</groupId>
      <artifactId>commons-jelly-tags-log</artifactId>
      <version>1.0</version>
      <url>http://jakarta.apache.org/commons/jelly/tags/log/</url>
    </dependency>
      
    <dependency>
      <groupId>commons-jelly</groupId>
      <artifactId>commons-jelly-tags-xml</artifactId>
      <version>1.0</version>
      <url>http://jakarta.apache.org/commons/jelly/tags/xml/</url>
    </dependency>
      
      
    <!-- END for test -->
    
    <!-- START for running demos -->

    <dependency>
      <id>commons-cli</id>
      <version>1.0</version>
    </dependency>
    
    <!-- END for running demos -->
    
  </dependencies>
  
</project>
