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

  <description>
      This is a Jelly interface for SQL.
  </description>
  <shortDescription>Commons Jelly SQL Tag Library</shortDescription>
  
  <versions>
    <version>
      <id>1.0</id>
      <name>1.0</name>
      <tag>COMMONS-JELLY-SQL-1_0</tag>
    </version>
  </versions>
  
    
  <dependencies>
    <!-- START for compilation -->
    <!-- unneeded at least for java 1.4 -->
    <dependency>
      <groupId>jdbc</groupId>
      <artifactId>jdbc</artifactId>
      <version>2.0</version>
      <!-- this is jdbc2_0-stdext.jar -->
    </dependency>
    
    <!-- END for compilation -->
    
    <!-- START for testing -->
    
    <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>
    
    <!-- END for testing -->

    <!-- START for running demos -->

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