<?xml version="1.0" encoding="UTF-8"?>
<!---
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You 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-threads</id>
  <name>commons-jelly-tags-threads</name>
  <currentVersion>1.0</currentVersion>
  <package>org.apache.commons.jelly.tags.threads</package>

  <description>
        A library for processing Jelly scripts using multiple threads.
  </description>
  <shortDescription>Commons Jelly Threads Tag Library</shortDescription>
  
  <versions>
    <version>
      <id>1.0</id>
      <name>1.0</name>
      <tag>COMMONS-JELLY-THREADS-1_0</tag>
    </version>
  </versions>
  
  <dependencies>

    <!-- START for test -->

    <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>
