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

  <description>
      This is a Jelly interface for Email
  </description>
  <shortDescription>Commons Jelly e-mail Tag Library</shortDescription>
  
  <versions>
    <version>
      <id>1.0</id>
      <name>1.0</name>
      <tag>COMMONS_JELLY_EMAIL-1_0</tag>
    </version>
  </versions>

  <dependencies>

    <!-- START for run time -->
    <dependency>
      <groupId>jaf</groupId>
      <version>1.0.2</version>
      <artifactId>activation</artifactId>
      <url>http://java.sun.com/beans/glasgow/jaf.html</url>
      <properties>
        <gump.project>jaf</gump.project>
      </properties>
    </dependency>
    
    <dependency>
      <groupId>javamail</groupId>
      <artifactId>mail</artifactId>
      <version>1.2</version>
      <url>http://java.sun.com/products/javamail/javamail-1_2.html</url>
      <properties>
        <gump.project>javamail</gump.project>
        <gump.id>javamail</gump.id>
      </properties>
    </dependency>
    <!-- END for run time -->

    
  </dependencies>
  
</project>
