<?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-bean</id>
  <name>commons-jelly-tags-bean</name>
  <currentVersion>1.0.1-SNAPSHOT</currentVersion>
  <package>org.apache.commons.jelly.tags.bean</package>

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

  <dependencies>

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

    <!-- END for test -->

  </dependencies>
  
</project>
