<?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>
  <groupId>commons-cli</groupId>
  <artifactId>commons-cli</artifactId>
  <name>CLI</name>
  <currentVersion>1.1</currentVersion>
  <inceptionYear>2002</inceptionYear>
  <shortDescription>Commons CLI</shortDescription>
  <description>
    Commons CLI provides a simple API for presenting, processing and
    validating a command line interface.
  </description>
  <logo>/images/logo.png</logo>

  <url>http://jakarta.apache.org/commons/cli/</url>
  <package>org.apache.commons</package>

  <organization>
    <name>Apache Software Foundation</name>
    <url>http://www.apache.org</url>
    <logo>http://jakarta.apache.org/images/original-jakarta-logo.gif</logo>
  </organization>

  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>/LICENSE.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <gumpRepositoryId>jakarta</gumpRepositoryId>
  <issueTrackingUrl>http://issues.apache.org/jira/</issueTrackingUrl>
  <siteAddress>people.apache.org</siteAddress>
  <siteDirectory>/www/jakarta.apache.org/commons/cli/</siteDirectory>
  <distributionDirectory>/www/jakarta.apache.org/builds/jakarta-commons/cli/</distributionDirectory>

  <repository>
    <connection>scm:svn:http://svn.apache.org/repos/asf/jakarta/commons/proper/cli/trunk</connection>
    <url>http://svn.apache.org/repos/asf/jakarta/commons/proper/cli/trunk</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/mod_mbox/jakarta-commons-dev/</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/mod_mbox/jakarta-commons-user/</archive>
    </mailingList>
  </mailingLists>

  <developers>
    <developer>
      <name>James Strachan</name>
      <id>jstrachan</id>
      <email>jstrachan@apache.org</email>
      <organization>SpiritSoft, Inc.</organization>
    </developer>
    <developer>
      <name>Bob McWhirter</name>
      <id>bob</id>
      <email>bob@werken.com</email>
      <organization>Werken</organization>
      <roles>
        <role>contributed ideas and code from werken.opt</role>
      </roles>
    </developer>
    <developer>
      <name>John Keyes</name>
      <id>jkeyes</id>
      <email>jbjk@mac.com</email>
      <organization>integral Source</organization>
      <roles>
        <role>contributed ideas and code from Optz</role>
      </roles>
    </developer>
    <developer>
      <name>Rob Oxspring</name>
      <id>roxspring</id>
      <email>roxspring@imapmail.org</email>
      <organization>Indigo Stone</organization>
      <roles>
        <role>designed CLI2</role>
      </roles>
    </developer>
  </developers>

  <contributors>
    <contributor>
      <name>Peter Donald</name>
      <roles>
        <role>contributed ideas and code from Avalon Excalibur's cli package</role>
      </roles>
    </contributor>
    <contributor>
      <name>Brian Egge</name>
      <roles>
        <role>made the 1.1 release happen</role>
      </roles>
    </contributor>
    <contributor>
      <name>Berin Loritsch</name>
      <email>bloritsch@apache.org</email>
      <roles>
        <role>helped in the Avalon CLI merge</role>
      </roles>
    </contributor>
    <contributor>
      <name>Peter Maddocks</name>
      <email>peter_maddocks@hp.com</email>
      <organization>Hewlett-Packard</organization>
      <roles>
        <role>supplied patch</role>
      </roles>
    </contributor>
    <contributor>
      <name>Andrew Shirley</name>
      <roles>
        <role>lots of fixes for 1.1 and 2.0</role>
      </roles>
    </contributor>
  </contributors>

  <dependencies>

    <!-- used for unit tests -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <properties>
       <scope>test</scope>
       <comment>
        Required only for testing.
       </comment>
      </properties>
    </dependency>

  </dependencies>

  <build>
    <nagEmailAddress>commons-dev@jakarta.apache.org</nagEmailAddress>
    <sourceDirectory>src/java</sourceDirectory>
    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>

    <!-- Unit test classes -->
    <unitTest>
      <includes>
        <include>**/*Test.java</include>
      </includes>
    </unitTest>
    <resources>
      <resource>
        <directory>${basedir}</directory>
        <targetPath>META-INF</targetPath>
        <includes>
          <include>NOTICE.txt</include>
        </includes>
      </resource>
    </resources>
  </build>

  <reports>
    <report>maven-changes-plugin</report>

    <!-- Pointless given tht the code is most definitely not 'sun' style -->
    <!--report>maven-checkstyle-plugin</report-->  

    <report>maven-javadoc-plugin</report>
    <report>maven-junit-report-plugin</report>
    <report>maven-jxr-plugin</report>
    <report>maven-license-plugin</report>
    <report>maven-pmd-plugin</report>
    <!--
    <report>maven-simian-plugin</report>
    <report>maven-jcoverage-plugin</report>
    <report>maven-findbugs-plugin</report>
    -->
  </reports>
</project>
