<?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>
  <pomVersion>3</pomVersion>
  <id>commons-jelly-tags</id>
  <name>Jelly Library Master Maven POM</name>
  <currentVersion>1.0</currentVersion>

  <organization>
    <name>Apache Software Foundation</name>
    <url>http://www.apache.org</url>
    <logo>http://jakarta.apache.org/commons/images/jakarta-logo-blue.gif</logo>
  </organization>
  <logo>/images/logo.jpg</logo>
  <package>org.apache.commons.jelly.tags.*</package>
  <gumpRepositoryId>jakarta</gumpRepositoryId>
  
  <url>http://jakarta.apache.org/commons/jelly/libs/</url>
  <issueTrackingUrl>http://issues.apache.org/</issueTrackingUrl>
  
  <siteAddress>jakarta.apache.org</siteAddress>
  <siteDirectory>/www/jakarta.apache.org/commons/jelly/jelly-tags</siteDirectory>
  <distributionDirectory>/www/jakarta.apache.org/builds/jakarta-commons/jelly/jelly-tags</distributionDirectory>
  
  <repository>
    <connection>scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-commons/jelly/jelly-tags</connection>
    <url>http://cvs.apache.org/viewcvs/jakarta-commons/jelly/jelly-tags</url>
  </repository>
  
  <mailingLists>
    <mailingList>
      <name>Commons Dev List</name>
      <subscribe>commons-dev-subscribe@jakarta.apache.org</subscribe>
      <unsubscribe>commons-dev-unsubscribe@jakarta.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/eyebrowse/SummarizeList?listName=commons-dev@jakarta.apache.org</archive>
    </mailingList>
    <mailingList>
      <name>Commons User List</name>
      <subscribe>commons-user-subscribe@jakarta.apache.org</subscribe>
      <unsubscribe>commons-user-unsubscribe@jakarta.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/eyebrowse/SummarizeList?listName=commons-user@jakarta.apache.org</archive>
    </mailingList>
  </mailingLists>

  <build>
    <nagEmailAddress>commons-dev@jakarta.apache.org</nagEmailAddress>
    <sourceDirectory>${basedir}/src/java</sourceDirectory>
    <unitTestSourceDirectory>${basedir}/src/test</unitTestSourceDirectory>
    <integrationUnitTestSourceDirectory/>
    <aspectSourceDirectory/>

    <!-- Unit test classes -->
    <unitTest>
      <includes>
        <include>**/Test*.java</include>
      </includes>
    </unitTest>

    <!-- Integration unit test classes -->
    <integrationUnitTestPatterns></integrationUnitTestPatterns>
    
    <resources>
      <includes>
        <include>**/*.properties</include>
      </includes>
    </resources>
    
    <jars></jars>
  </build>

</project>
